functiondevise模式

有很多function成语:monads,applicatives,箭头等,他们在不同的文章logging,但不幸的是我不知道任何书籍或文章,他们在一个地方总结(有Typeclassopedia,但它有很多没有覆盖的地区)。 任何人都可以推荐一篇文章/书籍,这些文章/书籍在一个地方很好的涵盖了他们,并且可以让程序员在FP中获得中级技能。

我的build议是,如果你想学习Scala,请阅读Paul Chiusano和Tony Morris的书:

http://manning.com/bjarnason/

第二部分:functiondevise和组合库

  1. 制作小语言
  2. JSON序列化
  3. 基于规格的testing
  4. parsing器
  5. 纯粹的function并行
  6. 纯粹的function状态

第三部分:functiondevise模式

  1. 抽象的情况
  2. 函子
  3. 单子
  4. 应用仿函数
  5. 可穿越和可折叠的数据结构
  6. Comonads

第四部分:打破规则:效应和I / O

  1. 影响与副作用
  2. stream处理和增量I / O
  3. 用types系统强化效果范围

对不起,我不知道那些涵盖了所有这些构造的不同用法的文章或书籍,但我可以给你几个个人资源的链接。

一个相当常见的模式是build立单子变压器而不是简单的单子(另见下一段的链接)。 它基本上意味着你build立了一些必须与其他monad结合的东西,导致更复杂的能够处理它们两个的特征。

真实世界Haskell中有关于单子的几章。 在第14章。Monads作者解释了基础知识和一些常见的用法(也许,列表,状态)。 第十五章用单子编程提供了更多关于如何有效使用它们的解释(它也包括读者单子)。 下面的章节解释了如何使用Parsec ,但是search文章可能会更有趣,其中包括如何实际工作:它应该是组织良好的monadsparsing使用的一个很好的例子。 Fianlly, 第18章 。Monad 变压器介绍了Monad变压器是如何工作的,然后展示了如何逐步build立一个变压器。 对本章最后部分的考虑也很有意思。

我曾经读过关于单子的创造性使用的一个非常有趣的问题。 build议的链接是关于这个话题的真棒读。 有了这个精神,我试图用同样的方法来提问:我的答案肯定比单子上的答案要less,不过还是有趣的。


关于四人帮的OOP模式,IBM在他们的系列function思想中有三篇关于这个话题的很好的文章。 目标函数语言是Scala。 他们继续解释OOP中的通常devise模式,并展示它们如何映射到Scala。

  1. function性思维:functiondevise模式,第1部分 。 这里他们涵盖了工厂,模板方法,策略,轻量级。 底线是通过具有一等价值的function,一切都更简单。
  2. function性思维:functiondevise模式,第2部分 。 这是关于java和groovy 。 它符合适配器模式。
  3. function性思维:functiondevise模式,第3部分 。 在这里他们谈论解释模式。 再次,目标语言是groovy。

与您的问题最相关的文章是肯定的第一个,但其他两个可能是有趣的相关阅读不过。

杰里米·吉本斯(Jeremy Gibbons) 在FP博客中有一个模式,注定最终成为你所要求的书。 当然,那还不是你想要的那么有用,但他应该得到一些鼓励!

同时,我会为Brent Yorgey的Typeclassopedia说+1。 这是非常有用的,如果有后来的部分混淆,这个网站是一个很好的地方,以达到他们的底部。 我知道布伦特保持审查。 如果他没有联系他的读者,请给他一些帮助。

很多FP的东西在Oleg的网站上发布: http : //okmij.org/ftp/

关于来自Josh Suereth的FP模式介绍: http ://jsuereth.com/intro-to-fp/

你读过了学习你一个Haskell为好的后面的章节吗?

  • 第6章介绍了地图和折叠,它们是function语言中比较重要的两种“devise模式”。

  • 第11-13章按顺序覆盖了函子,应用函子和单子。 这很有帮助 – 很多教程介绍Functors,然后介绍Monads,然后在最后加上Applicative Functor(如果他们覆盖它的话)。 LYAH的顺序更好,因为从Functors => Applicative Functors => Monads让你渐渐走上了普遍和权力的阶梯。

  • 第14章介绍了Zippers – 你可以有效地将它们看作是一个指向特定数据段的容器类,这意味着你可以在指针位置进行O(1)访问和更新。

它不包括箭头或Comonads,这是Haskell中更高级的主题。 要了解如何以及为什么要使用箭头或Comonads,您应该已经牢牢掌握Monads,所以我不认为这是一个问题 – LYAH坚定地瞄准了Haskell市场的初学者端。