2005-12-14 [長年日記]
λ. Monadと思ったけどMonadじゃなかった何か
以下がMonadになってると思って頑張って証明しようとした*1けど、結局Monadになっていないことが分かってショボーン(´・ω・`)。もし(++)が可換であればMonadになるんだけどね*2。
-- coinductive data Automata i o = Automata [o] (i -> Automata o) instance Monad (Automata i) where return x = Automata [x] (\_ -> mzero) (Automata as t) >>= g = msum [g a | a <- as] `mplus` Automata [] (\c -> t c >>= g) instance MonadPlus (Automata i) where mzero = Automata [] (\_ -> mzero) Automata xs t `mplus` Automata ys u = Automata (xs++ys) (\c -> t c `mplus` u c)