【发布时间】:2012-02-22 20:40:56
【问题描述】:
我熟悉范畴论中的 monad(实际上它们是一个非常简单的概念),但 Haskell 中的 >>= 函数完全让我感到困惑。好的,所以将绑定应用于M a 和函数a -> M u 与首先将monad 应用于此函数,然后在指定值处对其进行评估并乘以结果:a >>= f 与@ 相同987654326@。但这是对计算的自然描述吗?是否有一些有用的方法可以帮助我理解它?
是否有一些不错的文章不是面向刚从 C++ 丛林中出来的人?
【问题讨论】:
-
我认为
>>=更多地代表了 monad 的“管道”方面,这实际上很重要,但理论上很无趣。我发现为 monad 实现join通常比>=更容易,我想使用join来定义 monad 会更聪明。 -
@Landei 您始终可以将其定义为
a >>= f = join (fmap f a) where join = ...;,假设已经存在Functor实例。 -
是的,我知道,但是最好已经定义了这两种方法(就彼此而言),并将选择哪一种方法留给用户(例如 @987654333 @ 和
Eq.(/=))。