首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习GADT的材料

学习GADT的材料
EN

Stack Overflow用户
提问于 2010-10-26 08:14:21
回答 4查看 1.3K关注 0票数 14

我开始在Haskell Wiki上阅读关于GADT的文章,但对它的理解并不是很舒服。你是否向Haskell初学者推荐了一个特定的书籍章节或一篇解释GADT的博客文章?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-26 13:22:29

Apfelmus已经制作了video tutorial for GADTs,这可能会有所帮助。

票数 16
EN

Stack Overflow用户

发布于 2010-10-26 08:41:58

我喜欢GHC manual中的示例。它很简单,并且说明了一些关键点:

  • GADT允许您使用Haskell的类型系统来对您正在实现的语言的类型系统进行建模( "object language")
  • This允许Haskell的静态检查断言您的“编译器传递”或诸如此类的东西是类型保留的。接受对象语言术语的函数可以假定这些术语是正确类型的。返回对象语言术语的函数需要生成类型良好的术语。与

构造函数匹配的GADT

  • 模式会导致类型优化。Haskell的整体类型是Term a -> a,但是eval (Lit i)的右边是Int类型,因为左边的构造函数是Haskell system的类型,并不关心你给你的GADT构造函数是什么类型。我们可以很容易地让data Term a中的每个构造函数都给出一个类型为Term aTerm Bool的结果,而data定义仍然可以通过。但是我们不能写eval :: Term a -> a。您可以选择GADT“标记类型”来对您的问题进行建模,这样您想要编写的有用函数就是具有良好类型的。
票数 6
EN

Stack Overflow用户

发布于 2010-10-26 14:24:16

其他链接:

  • http://www.haskell.org/haskellwiki/Generalised_algebraic_datatype
  • http://www.comlab.ox.ac.uk/people/ralf.hinze/talks/FOP.pdf
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4019811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档