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)
[ツッコミを入れる]
