来自Haskell维基:
Monad可以被视为各种数据或控制结构的标准编程接口,由Monad类捕获.所有常见的monad都是它的成员:
Run Code Online (Sandbox Code Playgroud)class Monad m where (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b -> m b return :: a -> m a fail :: String -> m a除了实现类函数之外,Monad的所有实例都应遵循以下等式或Monad Laws:
Run Code Online (Sandbox Code Playgroud)return a >>= k = k a m >>= return = m m >>= (\x -> k x >>= h) = (m >>= k) >>= h
问题:底层的三个monad法律是否实际上以语言强制执行?或者它们是否是你必须强制执行的额外公理,以便你的"Monad"语言结构与"Monad"的数学概念相匹配?