什么是Java的奇怪重复通用模式的Haskell等价物?

Mat*_*ick 11 generics haskell types

一个问题刚提出了关于Java泛型.示例代码是:

public interface A < T extends A < T> > {

}  
Run Code Online (Sandbox Code Playgroud)

一个链接的问题询问

Class Enum<E extends Enum<E>> ...
Run Code Online (Sandbox Code Playgroud)

当我尝试阅读关于这些通用表达式的java文档时,我的眼睛茫然,这对我来说是希腊语.

我希望我可以用Haskell等价物来理解它们!

Haskell中这些例子中的一个或两个的等价(或类似)是什么?

ham*_*mar 10

这个技巧用于允许接口引用具体的实现类型,例如强制参数的类型和结果的类型与实现类的类型相同,如下所示:

public interface Num<A extends Num<A>> {
    A add(A other); 
}
Run Code Online (Sandbox Code Playgroud)

这与您在Haskell中使用类型类免费获得的类似:

class Num a where
    (+) :: a -> a -> a
Run Code Online (Sandbox Code Playgroud)

  • 这并不是真正等价的,因为Java版本允许我定义一个类型`Foo implements Num <Bar>`,而Haskell版本只允许`Foo实现Num <Foo>`. (3认同)
  • @ sepp2k你*可以*做到这一点,但似乎这种Java模式的典型用法是完成hammar描述的内容. (2认同)