0

我正在尝试使用 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 类型的内容,但我不知道该怎么做。我不能使用BorC作为参数化类型,因为它们的类型在您运行该函数之前是未知的。

我看过其他类似的问题,比如这个关于 functors的问题,这个关于泛型泛型的问题这个关于接口的问题,但我没有找到我想要的答案。

非常感谢!

4

0 回答 0