我开始阅读有关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 的。这使得在其上的一切是建立尤其难以最简单的例子充分了解,你可以在什么许多模式都在做,但了解每条语句的确切作用是具有挑战性的猜测。

在“傻瓜”后解剖和沿途的语法的含义累积达到解释其自己的基本实施例中,这使得它更加有用的起点。我强烈推荐它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top