Haskell是一种具有许多根植于形式数学的特征的语言。我应该学习哪些数学主题才能更深入地理解和理解语言?例如,我认为抽象代数和范畴理论都是很好的主题。
答案 0 :(得分:9)
一般来说,离散数学,逻辑,思维集或关系,归纳,证明递归,核心约束,一些基本代数,数论,类型理论和lambda演算,BTW有书籍涵盖了你在潜入haskell时所需的所有数学
答案 1 :(得分:3)
我不认为抽象代数(组,环等)与Haskell直接相关,尽管抽象代数中使用的思维方式对Haskell程序员非常有用。这与命令式语言形成鲜明对比,命令式语言要求思维过程更像微积分或分析中使用的那些。
在我看来,了解一点类别理论非常有帮助。如果你能理解Typeclassopedia,那就足够了。 wikibook http://en.wikibooks.org/Haskell/Category_theory是一个很好的可读介绍,我发现它比任何数量的monad教程更有帮助。公平地说,那是关于我自己目前对这个主题的知识的限制,所以也许我错过了一些我还没有意识到的东西。更先进的类别理论出现在一些先进的Haskell主题中,例如泛型,但至少目前我认为那些相当专业。我已经开始观看一些Catsters视频(在Youtube搜索框中键入“catsters”),并发现它们对于构建“Haskell来自哪里”的视图很有意思,但我还没有看到那么多。
我认为了解逻辑也很重要,足以理解Haskell函数是由其类型签名(Curry-Howard对应)表示的谓词的证明。这个概念的发烧友使用(我从远处看)似乎来自Coq和Agda中使用的直觉型理论知识。去年夏天,许多Haskellers正在阅读“软件基金会”(http://www.cis.upenn.edu/~bcpierce/sf/),这是关于Coq并且看起来很棒,但我自己花了很多时间花在任何时间。它在我的名单上; - )。