数学需要了解Haskell类型系统背后的理论吗?


9

最近,我对Haskell产生了浓厚的兴趣。

在尝试学习新概念(例如,forall关键字ST monad)和一般的Haskell的类型系统时,我不断地从类别理论lambda演算中学习概念。所以,我想知道:

  1. 数学的其他哪些分支对于深入了解Haskell的类型系统也很重要?

  2. 我可以放弃对这些数学的严格研究,而是专注于某些相关概念吗?(例如,lambda演算中的量词。)如果是,那么哪些概念必不可少?

我希望很快能学到类型和编程语言,但是,请提出您认为合适的其他替代阅读资源。


4
类别理论的知识对于了解和使用Haskell并不是必不可少的,但可以帮助您了解一些基础概念。可以从中了解这些知识的唯一真正的数学分支是范畴理论知识,它不仅扎根于其中,而且您几乎不会依赖于其他数学,因此这是一个非常孤立的领域。拿起Lambda演算,研究与不同的lambda变体相关的不同类型的系统,然后阅读该SO答案并了解类别理论。
吉米霍法2013年

3
我不会对掌握基础类型系统感到困惑。至少不要让不知道所有事情阻止您完成几个项目。只需在Haskell中完成几个简单的项目,就可以使我看到其背后的数学美,并驱使我理解它。
2013年

2
@ChaosPandion我同意这种观点,但是我一直在从事可能需要在STmonad中编写代码的项目。当我不了解所有相关的类型签名时,编写可以编译的代码是很棘手的,因此,我认为提高对类型系统的理解是审慎的做法。
罗布

3
@robjb-我当然同意您的看法,请加深了解。老实说,我的评论更多是针对一般观众,他们可能会发现Haskell过于恐吓而无法尝试。
ChaosPandion

Answers:


11

不,您无需阅读有关类别理论的书即可了解Haskell。

我已经使用Haskell几年了,出于好奇心选择了一些类别理论,这确实没有必要。一方面,很高兴看到所有这些抽象如何适合“全局”,但我没有去做,“哦,我的天哪,我只需要将该Maybe类别从[]s 转变为s,然后我就可以保存公主!”。

现在,取决于您对Haskell类型理论所做的工作已经迫在眉睫。

如果您只是在学习haskell,请不要尝试去理解类型系统的每个细微差别。请不要,这就像尝试先学习C ++模板元编程一样。奇特的类型是出色的工具,但是对函数式编程有很好的了解比了解强制性多态性要好。

现在让我们说,在经过一两年的Haskell之后,您希望了解Haskell的类型系统如何工作的每一个微妙的部分,然后,是的,某些类型理论可能会有所帮助。

它将帮助您了解事物工作原理的一些逻辑,而且坦率地说,它是值得一看的非常酷的计算机科学IMO分支。您可以挑选感兴趣的零件,但仍然可以学到很多。

对于Haskell,请看一下STLC,HM类型的系统(系统F)以及lambda多维数据集(Haskell是系统Fw iirc)和等递归类型。类型和编程语言是很好的入门资源,涵盖了所有这些以及更多内容。

如果您真的想喝凉爽的药,并且发现自己是一个崭露头角的理论家,请去阿格达(Agda)或科克(Coq)戳戳。这些具有“从属类型”的特征,在lambda多维数据集中比Haskell向前一步。依赖类型让类型依赖于术语。这意味着类型足够强大,可以实际证明定理。对于好奇,谷歌搜索的“咖喱霍华德同构”,应该会提出一些有趣的结果。


简要描述Agda和Coq会很有用。
ChaosPandion

@ChaosPandion更新
Daniel Gratzer

好像很好 我只是想说这些名字不足以激起许多人的兴趣。
ChaosPandion
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.