我试图用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);
}
我们说我有接口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
或C
作为参数化类型,因为在您运行该函数之前,它们的类型是未知的。
我已查看其他类似问题,例如this one about functors,this one about generics of generics和this one about interfaces,但我找不到我要找的答案。
非常感谢!