monad是一种数学结构,大量用于(纯)函数式编程,基本上是Haskell.然而,还有许多其他数学结构可用,例如应用函子,强单子或幺半群.有些更具体,有些更通用.然而,monads更受欢迎.这是为什么?
我提出的一个解释是,它们是通用性和特异性之间的最佳点.这意味着monad捕获关于数据的足够假设,以应用我们通常使用的算法以及我们通常满足monadic定律的数据.
另一种解释可能是Haskell为monad(do-notation)提供了语法,但没有为其他结构提供语法,这意味着Haskell程序员(以及函数式编程研究人员)直观地被用于monad,其中更通用或特定(高效)的函数将也工作.
我不太多使用Haskell,但我理解Monads的概念.
我被Kleisli三重混淆了,然而,类别,
虽然Haskell中在返回和绑定功能方面限定单子,但也可以在以下方面,以限定一个单子
return和其它两个操作,join和fmap.该公式更符合类别理论中monad的原始定义.fmap具有类型的操作(t ? u) ? M t ? M u在两种类型之间采用函数,并生成一个函数,该函数对monad中的值执行"相同的操作".该join类型的操作将M (M t) ? M t两层monadic信息"扁平"为一层.
帮助我了解Monads的背景原理.
这两个配方的相关内容如下:
fmap f m = m >>= (return . f)
join n = n >>= id
fmap :: (a -> b) -> (m a -> m b)
unit :: a -> m a
join :: m (m a) -> m a
>>= :: m a -> …Run Code Online (Sandbox Code Playgroud)