Monad for Const?

Lan*_*dei 9 monads haskell

为什么没有monad实例Control.Applicative.Const?以下定义是正确的,还是违反了monad法则?

instance Monoid a => Monad (Const a) where
  return _ = Const mempty
  (Const x) >>= _ = Const x
Run Code Online (Sandbox Code Playgroud)

你能想到任何有用的应用吗?

ehi*_*ird 19

它违反了左侧身份法:return x >>= f必须与之相同f x,但要考虑f x = Const (x + 1).

  • 令人欣慰的是,特殊情况`Const()`是一个monad.实际上,它是终端单子. (8认同)