类别理论中的Monads由三元组T,单位,平坦 defined定义.
class Monad t where
map :: (a -> b) -> (t a -> t b) -- functorial action
unit :: a -> t a
flat :: t (t a) -> t a
class KleisliTriple t where
unit :: a -> t a
flatMap :: t a -> (a -> t b) -> t b
Run Code Online (Sandbox Code Playgroud)
KleisliTriple由运营商展示结构:( flatMap或bind在Haskell中)由map和的组成flat.
但是,我总是认为在函数式编程中理解和实现Monad概念更加简单和容易,通过将结构与对象(例如flatUnit,unit和的组合)展平来构成函数flat.
在这种情况下,flatUnit(flatUnit(x)) = flatUnit(x).我实际上是用这种方式在JavaScript中实现的,并且使用flatUnit和 …
javascript monads haskell functional-programming category-theory