关于scala:功能设计模式

Functional design patterns

有很多功能性的习语:单子、应用、箭头等。它们被记录在不同的文章中,但不幸的是,我不知道有哪本书或文章在一个地方总结了它们(有typeclassopedia,但它有很多方面没有很好地覆盖)。有人能推荐一篇文章/一本书吗?这篇文章/一本书在一个地方很好地涵盖了这些内容,并且对于具有中级FP技能的程序员来说,它是可以访问的?


我的建议是,如果你想学习斯卡拉,可以阅读保罗·奇乌萨诺和鲁纳·比亚纳森的书:

http://manning.com/bjarnason/

第二部分:功能设计与组合库

  • 制作小语言
  • JSON序列化
  • 基于规范的测试
  • 解析器
  • 纯函数并行
  • 纯功能状态
  • 第三部分:功能设计模式

  • 抽象的例子
  • 独异点
  • 函子
  • 单子
  • 应用函数
  • 可遍历和可折叠数据结构
  • 共济会会员
  • 第四部分:违反规则:影响和I/O

  • 效果与副作用
  • 流处理和增量I/O
  • 用类型系统实施效果范围界定

  • 很抱歉,我不知道有哪些文章或书籍详细介绍了所有这些结构的不同用法,但我可以给您提供一些到各个资源的链接。

    一个相当常见的模式是构建单体变压器,而不是简单的单体(另请参见下一段中的链接)。它基本上意味着您构建了一些必须与其他monad结合在一起的东西,从而生成一个更复杂的能够处理这两个monad的特性的东西。

    在现实世界中,哈斯克尔有几章是关于单子的。在第14章中。Monads作者解释了基础知识和一些常见用法(可能,列表,状态)。第15章。使用monad编程提供了关于如何有效地使用它们的更多解释(它也涵盖了读者monad)。下一章将解释如何使用parsec,但是搜索包含它实际工作方式的文章可能会更有趣:它应该是一个很好的示例,说明如何使用monad进行解析。最后,第18章。Monad Transformers介绍Monad Transformers的工作原理,然后演示如何逐步构建一个Monad Transformers。对本章最后部分的考虑也很有趣。

    我曾经读过一个非常有趣的关于单子创造性使用的问题。提议的链接是关于这个话题的精彩读物。有了这种精神,我也试着向箭头问同样的问题:我肯定得到的答案比单子上的少,但还是有意思的。

    关于"四人帮"的OOP模式,IBM在其系列功能性思考中有一组关于这个主题的3篇文章。目标函数语言是scala。他们继续解释OOP中的常见设计模式,并展示它们如何映射到scala中。

  • 功能思维:功能设计模式,第1部分。在这里,它们涵盖工厂、模板方法、策略、flyweight。归根结底,通过将函数作为第一类值,一切都变得简单多了。
  • 功能思维:功能设计模式,第2部分。这是关于Java和Groovy的。它满足适配器模式。
  • 功能思维:功能设计模式,第3部分。在这里,他们讨论解释器模式。同样,目标语言是groovy。
  • 最相关的文章W.R.T.你的问题肯定是第一篇,但其他两篇可能是有趣的相关读物。


    杰里米·吉本斯在FP博客中有一个模式,注定最终会成为你想要的书。当然,这还不是你现在想要的那样有用的条件,但他值得鼓励!

    同时,我要说的是布伦特·约尔基的排版《欧佩迪亚》的+1。它真的很有用,如果后面的部分混淆了,这个站点是一个很好的地方,可以到达它们的底部。我知道布伦特一直在审查。如果他不能接触到他的读者,给他一些帮助。


    许多FP资料都在Oleg的网站上发布:网址:http://okmij.org/ftp/

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


    你读过《学好哈斯克尔》后面几章吗?

    • 第6章介绍了地图和折叠,这是功能语言中最重要的两种"设计模式"。

    • 第11-13章依次介绍了函子、应用函子和单子。这是很有帮助的-许多教程先介绍了函数,然后介绍了monads,然后在末尾附加应用函数(如果他们完全覆盖了它)。在lyah中,顺序更好,因为从函子移动=>应用函子=>单子会逐渐使你向通用性和权力的阶梯移动。

    • 第14章介绍了拉链——您可以有效地将其视为带有指向特定数据块的指针的容器类,这意味着您可以在指针位置获得O(1)访问和更新。

    它不包括箭头或连体字,这是哈斯克尔的一个更高级的主题。要理解如何和为什么使用箭头或魔符,你一定要对魔符有一个坚定的了解,所以我不认为这是一个问题-莉亚是坚定地针对哈斯克尔市场的初学者结束。