有很多功能性习语:monad,applicatives,arguments等。它们在不同的文章中都有记录,但不幸的是,我不知道任何本书或文章在一个地方对其进行了总结(有Typeclassopedia,但它有很多覆盖率不高的区域)。任何人都可以推荐一篇文章/书,该书/书在一个地方就可以很好地覆盖它们,并且对FP具有中级技能的程序员可以访问吗?
有很多功能性习语:monad,applicatives,arguments等。它们在不同的文章中都有记录,但不幸的是,我不知道任何本书或文章在一个地方对其进行了总结(有Typeclassopedia,但它有很多覆盖率不高的区域)。任何人都可以推荐一篇文章/书,该书/书在一个地方就可以很好地覆盖它们,并且对FP具有中级技能的程序员可以访问吗?
Answers:
我的建议是,如果您想学习Scala,请阅读Paul Chiusano和Runar Bjarnason的书:
第二部分:功能设计和组合器库
第三部分:功能设计模式
第四部分:打破规则:效果和I / O
抱歉,我不了解详细介绍所有这些构造的不同用法的文章或书籍,但我可以为您提供一些指向各个资源的链接。
一个很常见的模式是构建monad转换器,而不是简单的monad(另请参见下一段中的链接)。从根本上讲,这意味着您需要构建必须与其他monad结合使用的东西,从而导致能够处理它们两者功能的更复杂的东西。
在真实世界的Haskell中,有几章涉及monad。在第14章中,作者解释了Monad的基本知识和一些常用用法(也许是列表,状态)。第15章使用monad编程提供了有关如何有效使用它们的更多解释(它也涵盖了读者monad)。下一章将说明如何使用Parsec,,但是搜索涵盖其实际工作方式的文章可能会更有趣:这应该是一个很好的示例,说明如何使用monad进行解析。Fianlly,第18章。Monad 变压器介绍monad转换器的工作原理,然后逐步说明如何构建一个转换器。对本章最后部分的考虑也很有趣。
我曾经读过一个关于单子的创造性用法的非常有趣的问题。建议的链接是关于该主题的精彩阅读。本着这种精神,我试图向箭头索取同样的东西:我得到的答案肯定比单子上的答案少,但是仍然很有趣。
关于由四人组成的OOP模式,IBM撰写了三篇很好的文章,涉及其系列功能思维中的主题。目标功能语言是Scala。他们通过解释OOP中的常规设计模式并展示如何映射到Scala中着手进行。
与您的问题最相关的文章肯定是第一个,但是其他两个可能还是有趣的相关读物。
FP的很多内容都在Oleg的网站上发布:http: //okmij.org/ftp/
Josh Suereth关于FP模式的演示:http ://jsuereth.com/intro-to-fp/
您是否阅读过“ 了解Haskell的伟大成就”的后续章节?
第6章介绍了地图和折页,这是功能语言中最重要的两种“设计模式”。
第11-13章按此顺序介绍了函子,适用函子和Monad。这很有用-许多教程先介绍Functor,然后介绍Monads,然后在末尾附加Applicative Functor(如果它们涵盖了所有内容)。LYAH中的顺序更好,因为从Functors => Applicative Functors => Monads转变为使您逐渐提高一般性和能力的阶梯。
第14章介绍了Zippers-您可以有效地将它们视为具有指向特定数据的指针的容器类,这意味着您可以访问O(1)并在指针位置进行更新。
它不涉及“箭头”或“共鸣”,这是Haskell中更高级的主题。要了解如何以及为什么使用Arrows或Comonads,您一定已经对Monads有了牢固的了解,因此我认为这不是问题-LYAH坚定地瞄准了Haskell市场的新手。