Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么类型类很难实现?_Haskell_Ghc_Typeclass - Fatal编程技术网

Haskell 为什么类型类很难实现?

Haskell 为什么类型类很难实现?,haskell,ghc,typeclass,Haskell,Ghc,Typeclass,在演示的第30/78张幻灯片上,Simon指出类型类的实现在一开始是一种“绝望”。有人知道这是为什么吗?我想我是为数不多的有第一手经验的人之一,因为我在hbc中实现了它,当时还没有现有技术 因此,从Wadler&Blott的论文中可以清楚地看到,类型检查是Hindley-Milner类型检查的扩展,在运行时,您应该传递字典。从这一点到实际实施是相当大的一步。理解困难的一个好方法是从Wadler-Blott文件开始实际实现它 首先,您需要想出一个类型检查器的想法,它不仅可以检查类型,还可以转换程序

在演示的第30/78张幻灯片上,Simon指出类型类的实现在一开始是一种“绝望”。有人知道这是为什么吗?

我想我是为数不多的有第一手经验的人之一,因为我在hbc中实现了它,当时还没有现有技术

因此,从Wadler&Blott的论文中可以清楚地看到,类型检查是Hindley-Milner类型检查的扩展,在运行时,您应该传递字典。从这一点到实际实施是相当大的一步。理解困难的一个好方法是从Wadler-Blott文件开始实际实现它

首先,您需要想出一个类型检查器的想法,它不仅可以检查类型,还可以转换程序;在类型检查时插入证据(词典)。您还需要弄清楚如何使用实例声明作为推理系统从旧字典构造新字典

回想起来,这一切似乎都是显而易见的,但请记住,从那时起,已经写了很多解释性的文章。从一篇论文中理解如何做某事与一开始就提出它是非常不同的


此外,您希望类型类具有合理的效率,这会导致其自身的一系列问题。

不是Haskell知识的专家,但可能是因为以前从未做过,也没有人知道如何做。这是肯定的,总是这样:)但对于类型类,到底是什么导致了问题?@SjoerdVisscher类型类无法转换为数据类型,如果您希望转换保持为Haskell(1.0-98),因为方法除了类类型变量之外还可以有其他类型变量。@augustss:这不适用于Haskell 2010吗?@ehird是的,它适用。你需要更多的扩展来进行翻译。如果你愿意(或已经)把这个故事发布到某个地方,我会喜欢一个更长的版本。@JohnF.Miller好吧,现在已经超过20年了,所以细节在我的记忆中不再那么清晰。你能更详细地说吗?你能指出你提到的那些文件吗?