12

のモナドインスタンスがないのはなぜControl.Applicative.Constですか? 次の定義は正しいですか、それともモナドの法則に違反していますか?

instance Monoid a => Monad (Const a) where
  return _ = Const mempty
  (Const x) >>= _ = Const x

また、何か便利なアプリケーションを思いつきますか?

4

2 に答える 2

22

これは、左同一性法則に違反しています:return x >>= fと同じでなければなりませんが、 をf x考慮してf x = Const (x + 1)ください。

于 2012-07-17T20:35:30.903 に答える