runAccum w look = return (w, w) runAccum w (look >>= continuation) = runAccum w (continuation w)
cutfail >>= k = cutfail
cutfail <|> m = cutfail
empty >>= k = empty
runReader a (ask >>= k) = runReader a (k a)
runState a (get >>= k) = runState a (k a)
>>> exitFailure *** Exception: ExitFailure 1
>>> exitSuccess *** Exception: ExitSuccess
mzero >>= f = mzero v >> mzero = mzero
mzero = empty
empty <|> a == a a <|> empty == a