我正在尝试使用 Haskell 学习函数式编程,但我很难理解一些概念。我认为将其中一些概念翻译成 Java 是个好主意,因为它是我感觉最舒服的语言。
我有以下界面Applicative<A>
:
public interface Applicative<A>
{
public <B> Applicative<B> pure (B value);
public <B> Applicative<B> apply (Applicative<Function<A, B>> applicative);
public <B, C> Function<Applicative<B>, Applicative<C>> liftA2 (
Function<A, Function<B, C>> function);
}
假设我有一个 interface 的实现ListApplicative<A>
。它扩展ArrayList<A>
并实现Applicative<A>
.
问题是:我如何把所有的Applicative<?>
变成ListApplicative<?>
?甚至可能吗?有什么技巧可以做到吗?
public class ListApplicative<A> extends ArrayList<A> implements Applicative<A>
{
@Override
public <B> ListApplicative<B> pure (B value)
{
// Implementation
}
@Override
public <B> ListApplicative<B> apply (
ListApplicative<Function<A, B>> applicative)
{
// Implementation
}
@Override
public <B, C> Function<ListApplicative<B>, ListApplicative<C>> liftA2 (
Function<A, Function<B, C>> function)
{
// Implementation
}
}
我已经阅读了一些关于 F-bound 类型的内容,但我不知道该怎么做。我不能使用B
orC
作为参数化类型,因为它们的类型在您运行该函数之前是未知的。
我看过其他类似的问题,比如这个关于 functors的问题,这个关于泛型泛型的问题和这个关于接口的问题,但我没有找到我想要的答案。
非常感谢!