题
我开始阅读有关GADT在Haskell维基,但是没有感觉很舒服的理解。你推荐一个具体的书籍章节或一篇博客解释GADT一Haskell初学者?
解决方案
Apfelmus取得视频教程GADTs 其可能是有益的。
其他提示
我喜欢的例子中 GHC手册.这是简单的,并且它说明了一些关键点:
GADTs让你使用Haskell的类型系统模型的系统的一种语言,你实现("对象的语言")
这允许Haskell的静态检查,以断言,您的"编译器通行证"或是什么-不是类型的保存。功能把对象语言的条款可以假设这些条款都是输入的。功能回对象的语言方面需要产生好的-类型的条款。
模式匹配的一个GADT构造原因型改进。
eval
具有类型Term a -> a
总体而言,但是右手边对eval (Lit i)
具有类型Int
, 因为左边的构造有类型Term Int
.Haskell系统不在乎什么类型你得到你的GADT构造方法。我们可以很容易地使每一个构造
data Term a
得到的结果的类型Term a
, 或Term Bool
, ,data
定义将仍然通过。但是,我们不能写信eval :: Term a -> a
.你选择的GADT"标签的类型"模型 你的 问题,以便使有用的功能,你想要写的是良好的类型。
在Haskell的wiki的 GADTs假人是我看到的最好说明。
我(我怀疑其他人)与大多数介绍的问题是,他们表现出GADTs的例子在语法方面是不明显的,直到你明白GADTs 的。这使得在其上的一切是建立尤其难以最简单的例子充分了解,你可以在什么许多模式都在做,但了解每条语句的确切作用是具有挑战性的猜测。
在“傻瓜”后解剖和沿途的语法的含义累积达到解释其自己的基本实施例中,这使得它更加有用的起点。我强烈推荐它。