单子之后学习Haskell的下一步是什么?
我一直在逐渐学习Haskell,甚至觉得我有一堆monad。 然而,我仍然有很多很难理解的奇特东西,比如Arrows,Applicative等等。虽然我从Haskell代码中汲取了一些我见过的东西,但最好找到一个真正解释的教程他们完全。 (似乎有数十个关于单子的教程..但是一切似乎都是在那之后完成的!)
下面是我在“获取monad”之后发现的一些有用的资源:
最重要的是,深入了解您使用的任何Hackage库的代码。 如果他们正在使用您不明白的语法或成语或扩展名进行查找,请查看它。
关于类型类:
Applicative
实际上比Monad
简单。 我最近在其他地方说过一些关于它的一些事情,但要点是,它是关于增强Functor
的,你可以提升函数。 为了得到一个感觉Applicative
,你可以尝试使用不使用写东西秒差距do
记号-我的经验是,应用性风格的作品比一元为简单的解析器更好。
Arrow
是一种非常抽象的方式,用于处理类似于函数的事物(类型之间的“箭头”)。 直到你偶然发现一种自然类似Arrow
东西时,他们可能很难让你的头脑转动。 在写反馈循环的交互式状态机时,我重新创造了一半的Control.Arrow
(糟糕的)。
你没有提到它,但是一个经常被低估的,强大的类型是谦卑的Monoid
。 有很多地方可以找到类猿结构。 看看monoids包,例如。
除了类型类,我会提供一个非常简单的回答你的问题: 编写程序! 学习的最佳方式是通过做,所以选择一些有趣或有用的东西,并让它发生。
事实上,许多更抽象的概念 - 比如Arrow
- 如果稍后再回来,可能会更有意义,并且发现像我一样,它们为您遇到的问题提供了一个整洁的解决方案,但没有甚至意识到可以被抽象出来。
然而,如果你想要特定的东西来拍摄,为什么不看看功能反应编程 - 这是一个有很多承诺的技术家族,但是有很多关于什么是最佳方法的开放问题它是。
像Monad
, Applicative
, Arrow
, Functor
这样的类型类对于改变你对代码的思考方式来说是伟大的,甚至更伟大的,而不是必须具有通用函数的便利性。 但是人们普遍认为Haskell的“下一步”正在学习更多的类结构和构造控制流的方法。 下一步是决定你想要写什么,并试着写下来,探索你需要的东西。
即使你理解Monad,这并不意味着你已经抓住了单向结构化代码所能做的事情。 玩解析器组合库,或者自己写。 探索为什么应用符号有时更容易。 探索为什么限制自己适用解析器可能更有效。
查看逻辑或数学问题,并探索实现回溯的方式 - 深度优先,宽度优先等。探索ListT与LogicT和ChoiceT之间的区别。 看看延续。
或者做一些完全不同的事!
链接地址: http://www.djcxy.com/p/80783.html