Monads(Haskell)的主要目的

sim*_*ems 1 monads haskell

根据我的读数,我了解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只是一个适用于各种类型的有用界面,但是在你熟悉这些类型本身之前你就无法欣赏它,就像你从未见过任何蓝色事物一样,你不能欣赏"蓝色"这个词.