haskell - Monads(Haskell)的主要目的

标签 haskell monads

<分区>

根据我的阅读,我了解到 Monad 主要用于:

-函数组合 通过将一种函数输出类型与另一种函数输入类型相匹配。

我认为这是一篇非常好的文章:

http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html

它用盒子/包装器的概念解释了 Monad。但是我不明白这些 wrapper 是做什么用的?除了 Composition,Wrapper 有什么好处?

IO Monad 也是一个常见的例子。

name <- getLine -- name has the type String and getLine IO String

那么这种类型差异有什么好处呢?是错误处理吗?

最佳答案

将单子(monad)视为事物(名词)是一种混淆的根源。 Monad 更像是形容词。您不会问“蓝色”或“薄”有什么好处。您会找到一些有用的东西,例如一本蓝色的书或一支细笔,然后您会注意到一些图案 - 有些东西是蓝色的,有些很细,有些两者都不是。

与 monad 类似。要理解 monad,您应该首先对 monad 的事物有一些经验:MaybeEitherReader , 状态。了解它们的工作原理、>>=return 对它们的作用以及它们的用途,以及如何使用这些类型> 使用 Monad 类。 (因此,不要从 IO 开始。)然后您将准备好注意到这些不同类型之间的共性,并理解为什么它们遵循称为 Monad 的共同模式。

Monad 只是各种类型的有用接口(interface),但只有熟悉类型本身才能欣赏它,就像如果您从未见过蓝色就无法欣赏“蓝色”这个词一样东西。

关于haskell - Monads(Haskell)的主要目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51079162/

相关文章:

haskell - 删除 BST Haskell 中的最小值

haskell - 为什么这个变量在哪里不可见

haskell - 无法在文件夹中执行 I/O?

haskell - 带有 Hindley-Milner 类型系统的 runST

haskell - 根据数字用户输入构建反射域小部件/事件的动态列表

haskell - 比较两个字符串列表并删除部分匹配项

Haskell:打印函数内变量的类型

haskell - 如何从外部代码确定数据的构造函数?

haskell - 比较 ghc 中生成的代码

haskell - “All about monads”中的MonadError部分