関数型プログラミング言語Haskell Part15
■ このスレッドは過去ログ倉庫に格納されています
0109デフォルトの名無しさん
2011/07/24(日) 11:47:00.54とりあえず実験として Maybe クラスにそっくりな型を作り、下記のテストにかけたところ、
a b k の全ての組み合わせ(8通り)で True となりました
f :: (Monoid (m a), Monoid (m b), Monad m, Eq (m b)) => m a -> m a -> (a -> m b) -> Bool
f a b k = ((a `mappend` b) >>= k) == ((a >>= k) `mappend` (b >>= k))
>>108 の性質は Monad クラスと MonadPlus クラスのもつ関数の型と、
Monad 則および MonadPlus 則から導かれると思いますが、
Monoid クラスの持つ関数の型は MonadPlus クラスのそれらと形がそっくりですし、
MonadPlus 則と同じ法則を満たすように Monoid クラスのインスタンスを生成すれば、
同じ性質を持つ型が作れると、今のところ私は思っています(まだ証明してはいない)
本来の >>108 の式の恒等性はどうやって証明するんでしたっけ?
忘れてしまいましたが、mplus 関数を mappend 関数に書き換えても、
同じ証明方法が使えるのではないでしょうか
■ このスレッドは過去ログ倉庫に格納されています