单子之后学习Haskell的下一步是什么?

我一直在逐渐学习Haskell,甚至觉得我有一堆monad。 然而,我仍然有很多很难理解的奇特东西,比如Arrows,Applicative等等。虽然我从Haskell代码中汲取了一些我见过的东西,但最好找到一个真正解释的教程他们完全。 (似乎有数十个关于单子的教程..但是一切似乎都是在那之后完成的!)


下面是我在“获取monad”之后发现的一些有用的资源:

  • 正如SuperBloup指出的那样,Brent Yorgey的Typeclassopedia是不可或缺的(事实上它确实包含了箭头)。
  • 在真实世界的Haskell中有很多伟大的东西可以被认为是“单子之后”:例如,适用性解析,单子变换器和STM。
  • 约翰·休斯的“将箭头一般化Monads”是一个很好的资源,它教给我的单子和箭头一样多(尽管我认为当我阅读它时已经理解了单子)。
  • “Yampa Arcade”论文很好地介绍了功能反应式编程。
  • 在类型家庭:我发现与他们合作比阅读他们更容易。 vector-space包是一个开始的地方,或者你可以看看Oleg Kiselyov和Ken Shan关于Haskell和自然语言语义的课程。
  • 选择Chris Okasaki的纯功能数据结构的几个章节,并详细介绍它们。
  • Raymond Smullyan的“模仿一只模仿鸟”是一个非常容易理解的组合逻辑,它将改变你编写Haskell的方式。
  • 阅读GérardHuet在拉链上的功能性明珠。 代码是OCaml,但在处理这类文件时,能够将OCaml翻译成Haskell是很有用的(也不是很难)。
  • 最重要的是,深入了解您使用的任何Hackage库的代码。 如果他们正在使用您不明白的语法或成语或扩展名进行查找,请查看它。


    关于类型类:

  • Applicative实际上比Monad简单。 我最近在其他地方说过一些关于它的一些事情,但要点是,它是关于增强Functor的,你可以提升函数。 为了得到一个感觉Applicative ,你可以尝试使用不使用写东西秒差距do记号-我的经验是,应用性风格的作品比一元为简单的解析器更好。

  • Arrow是一种非常抽象的方式,用于处理类似于函数的事物(类型之间的“箭头”)。 直到你偶然发现一种自然类似Arrow东西时,他们可能很难让你的头脑转动。 在写反馈循环的交互式状态机时,我重新创造了一半的Control.Arrow (糟糕的)。

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


  • 除了类型类,我会提供一个非常简单的回答你的问题: 编写程序! 学习的最佳方式是通过做,所以选择一些有趣或有用的东西,并让它发生。

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

    然而,如果你想要特定的东西来拍摄,为什么不看看功能反应编程 - 这是一个有很多承诺的技术家族,但是有很多关于什么是最佳方法的开放问题它是。


    MonadApplicativeArrowFunctor这样的类型类对于改变你对代码的思考方式来说是伟大的,甚至更伟大的,而不是必须具有通用函数的便利性。 但是人们普遍认为Haskell的“下一步”正在学习更多的类结构和构造控制流的方法。 下一步是决定你想要写什么,并试着写下来,探索你需要的东西。

    即使你理解Monad,这并不意味着你已经抓住了单向结构化代码所能做的事情。 玩解析器组合库,或者自己写。 探索为什么应用符号有时更容易。 探索为什么限制自己适用解析器可能更有效。

    查看逻辑或数学问题,并探索实现回溯的方式 - 深度优先,宽度优先等。探索ListT与LogicT和ChoiceT之间的区别。 看看延续。

    或者做一些完全不同的事!

    链接地址: http://www.djcxy.com/p/80783.html

    上一篇: What's the next step to learning Haskell after monads?

    下一篇: Haskell vs. procedural programming in the real world