functiondevise模式
有很多function成语:monads,applicatives,箭头等,他们在不同的文章logging,但不幸的是我不知道任何书籍或文章,他们在一个地方总结(有Typeclassopedia,但它有很多没有覆盖的地区)。 任何人都可以推荐一篇文章/书籍,这些文章/书籍在一个地方很好的涵盖了他们,并且可以让程序员在FP中获得中级技能。
我的build议是,如果你想学习Scala,请阅读Paul Chiusano和Tony Morris的书:
第二部分:functiondevise和组合库
- 制作小语言
- JSON序列化
- 基于规格的testing
- parsing器
- 纯粹的function并行
- 纯粹的function状态
第三部分:functiondevise模式
- 抽象的情况
- 幺
- 函子
- 单子
- 应用仿函数
- 可穿越和可折叠的数据结构
- Comonads
第四部分:打破规则:效应和I / O
- 影响与副作用
- stream处理和增量I / O
- 用types系统强化效果范围
对不起,我不知道那些涵盖了所有这些构造的不同用法的文章或书籍,但我可以给你几个个人资源的链接。
一个相当常见的模式是build立单子变压器而不是简单的单子(另见下一段的链接)。 它基本上意味着你build立了一些必须与其他monad结合的东西,导致更复杂的能够处理它们两个的特征。
在真实世界Haskell中有关于单子的几章。 在第14章。Monads作者解释了基础知识和一些常见的用法(也许,列表,状态)。 第十五章用单子编程提供了更多关于如何有效使用它们的解释(它也包括读者单子)。 下面的章节解释了如何使用Parsec ,但是search文章可能会更有趣,其中包括如何实际工作:它应该是组织良好的monadsparsing使用的一个很好的例子。 Fianlly, 第18章 。Monad 变压器介绍了Monad变压器是如何工作的,然后展示了如何逐步build立一个变压器。 对本章最后部分的考虑也很有意思。
我曾经读过关于单子的创造性使用的一个非常有趣的问题。 build议的链接是关于这个话题的真棒读。 有了这个精神,我试图用同样的方法来提问:我的答案肯定比单子上的答案要less,不过还是有趣的。
关于四人帮的OOP模式,IBM在他们的系列function思想中有三篇关于这个话题的很好的文章。 目标函数语言是Scala。 他们继续解释OOP中的通常devise模式,并展示它们如何映射到Scala。
- function性思维:functiondevise模式,第1部分 。 这里他们涵盖了工厂,模板方法,策略,轻量级。 底线是通过具有一等价值的function,一切都更简单。
- function性思维:functiondevise模式,第2部分 。 这是关于java和groovy 。 它符合适配器模式。
- 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市场的初学者端。