根据我的读数,我了解Monads主要用于:
- 通过将一个函数输出类型与另一个函数输入类型匹配来构成函数.
我认为这是一篇很好的文章:
http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
它解释了Monads的盒子/包装概念.但是我不明白这些包装用的是什么?除了Composition之外,Wrapper有什么好处?
IO Monad也是一个常见的例子.
name <- getLine -- name has the type String and getLine IO String
Run Code Online (Sandbox Code Playgroud)
那么这种类型差异有什么好处呢?是错误处理吗?
Rom*_*aka 17
将monad视为事物(名词)是混乱的根源.Monads更像是形容词.你不要问'蓝色'或'瘦'有什么用.你会发现一些有用的东西,比如蓝皮书或薄笔,然后你会注意到一些模式 - 有些东西是蓝色的,有些是薄的,有些则不是.
与monads相似.要了解单子,你应该先与事一些经验是单子:Maybe,Either,Reader,State.了解它们如何工作,为它们做什么>>=和return做什么以及它们如何有用,以及如何在不使用Monad类的情况下使用这些类型.(因此,不要从IO开始.)然后,您将准备好注意这些不同类型之间的共性,并理解为什么它们遵循称为Monad的共同模式.
Monad只是一个适用于各种类型的有用界面,但是在你熟悉这些类型本身之前你就无法欣赏它,就像你从未见过任何蓝色事物一样,你不能欣赏"蓝色"这个词.