在monads之后学习Haskell的下一步是什么?

guh*_*hou 33 haskell

我一直在逐渐学习Haskell,甚至觉得我有一堆monad.然而,仍然有很多我不太理解的异国情调,比如Arrows,Applicative等.虽然我从Haskell代码中找到了点点滴滴,但我找到了一个真正解释的教程会很好他们完全.(似乎有几十个关于monad的教程......但是之后一切似乎都完成了!)

Tra*_*own 54

以下是我在"掌握"monad之后发现有用的一些资源:

  • 正如SuperBloup指出的那样,Brent Yorgey的Typeclassopedia是不可或缺的(事实上它确实涵盖了箭头).
  • Real World Haskell中有很多很棒的东西可以被认为是"在monads之后":例如,应用解析,monad变换器和STM.
  • 约翰休斯的"概括Monads to Arrows"是一个很好的资源,它教会了我关于monads的内容和它关于箭头的内容(尽管我认为我在读它时已经理解了monads).
  • "扬帕商场"纸是一种很好的介绍功能反应式编程.
  • 在类型家庭:我发现与他们一起工作比阅读他们更容易.该向量空间包是一个开始的地方,或者你可以看看从奥列格Kiselyov和肯山的代码在Haskell和自然语言的语义场.
  • 选择Chris Okasaki的纯功能数据结构的几章,并详细介绍它们.
  • Raymond Smullyan's Mock a Mockingbird是一个非常容易理解的组合逻辑介绍,它将改变你编写Haskell的方式.
  • 阅读GérardHuet的拉链功能珍珠.代码是OCaml,但是在处理这样的论文时能够将OCaml转换为Haskell是有用的(并且不是太困难).

最重要的是,深入研究您自己使用的任何Hackage库的代码.如果他们正在使用您不理解的语法或习语或扩展名,请查阅.

  • 我希望我能收到你的回答. (4认同)
  • 更新链接:[Typeclassopedia](http://www.haskell.org/wikiupload/8/85/TMR-Issue13.pdf),[拉链上的功能珍珠](http://www.st.cs.uni-saarland由Matchi.com提供回到/ EDU/seminare/2005 /高级-FP /文档/ HUET-zipper.pdf). (3认同)

C. *_*ann 10

关于类型类:

  • Applicative实际上比Monad.我最近别处说过一些关于它的事情,但要点是它是关于增强功能Functor的,你可以将功能提升到.为了感受Applicative,你可以尝试使用Parsec编写一些东西,而不使用do符号 -我的经验是,对于简单的解析器,应用风格比monadic更好.

  • Arrows是一种非常抽象的处理类似函数的方法(类型之间的"箭头").在你偶然发现一些天生Arrow的东西之前,他们可能很难理解.有一次,我Control.Arrow在编写具有反馈循环的交互式状态机时重新发明了一半(很差).

  • 你没有提到它,但是一个经常被低估,强大的类型是谦虚的Monoid.有很多地方可以找到类似幺半群的结构.例如,看看monoids包.


除了类型类,我会为你的问题提供一个非常简单的答案:编写程序!学习的最佳方式是做,所以选择一些有趣或有用的东西,让它成为现实.

事实上,许多更抽象的概念 - 比如 - Arrow如果你以后回到他们身上可能会更有意义,并且发现像我一样,他们为你遇到的问题提供了一个整洁的解决方案但是甚至没有实现可以被抽象出来.

但是,如果你想要特定的东西拍摄,为什么不看一下功能反应式编程 -这是一系列有很多承诺的技术,但是有很多未解决的问题是最好的方法它是.