学习GADT的材料

14 haskell gadt

我开始在Haskell Wiki上阅读有关GADT的内容,但对它的理解并不是很清楚.您是否建议为Haskell初学者解释GADT的特定书籍章节或博客文章?

Shi*_*oir 16

Apfelmus 为GADT制作了可能有用的视频教程.

  • 我也打算推荐它.;-) (5认同)
  • 我强烈推荐那些以GADT开头的人的视频. (2认同)

kee*_*gan 6

我喜欢GHC手册中的例子.这很简单,它说明了一些关键点:

  • GADT允许您使用Haskell的类型系统来模拟您正在实现的语言的类型系统("对象语言")

  • 这允许Haskell的静态检查断言你的"编译器通过"或什么不是类型保留.采用对象语言术语的函数可以假设这些术语是良好类型的.返回对象语言术语的函数需要生成类型良好的术语.

  • 匹配GADT构造函数的模式会导致类型细化. evalTerm a -> a整体类型,但右侧eval (Lit i)有has类型Int,因为左侧构造函数有类型Term Int.

  • Haskell系统不关心你给GADT构造函数的类型.我们可以很容易地使每个构造函数都data Term a给出类型的结果Term a,或者Term Bool,data定义仍然会经历.但我们无法写作eval :: Term a -> a.您可以选择GADT"标记类型"来模拟您的问题,以便您想要编写的有用函数是良好类型的.