のモナドインスタンスがないのはなぜControl.Applicative.Const
ですか? 次の定義は正しいですか、それともモナドの法則に違反していますか?
instance Monoid a => Monad (Const a) where
return _ = Const mempty
(Const x) >>= _ = Const x
また、何か便利なアプリケーションを思いつきますか?
これは、左同一性法則に違反しています:return x >>= f
と同じでなければなりませんが、 をf x
考慮してf x = Const (x + 1)
ください。