generics - 什么是 Java 的 Curiously Recurring Generic Pattern 的 Haskell 等价物?

标签 generics haskell types

一个 question刚刚想出了java泛型。示例代码是:

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

}  

一个链接的问题询问
Class Enum<E extends Enum<E>> ...

当我尝试阅读有关这些泛型表达式的 java 文档时,我的眼睛呆滞了,这对我来说是希腊语。

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

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

最佳答案

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

public interface Num<A extends Num<A>> {
    A add(A other); 
}

这类似于您在 Haskell 中免费获得的类型类:

class Num a where
    (+) :: a -> a -> a

关于generics - 什么是 Java 的 Curiously Recurring Generic Pattern 的 Haskell 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187773/

相关文章:

java - 如何解决这个 java 泛型过度使用或误用

c# - 通用 lambda 方法签名

Haskell:GHC 无法推断类型。由类型签名错误绑定(bind)的刚性类型变量

Haskell:从程序中的多个位置附加到列表

haskell - => 符号在 Haskell 中是什么意思?

c# - 确定对象是否是特定类型或派生自特定类型?

c# - 分配给委托(delegate)的通用方法

c# - 通用类型是任何接口(interface)的通用函数

Java:类型标记中的通用类型

c++ - vector 的返回类型