Am Sonntag, 13. Januar 2008 01:47 schrieb Brian Hurt: > So, I've been playing around with what I call the trivial monad: > > module TrivialMonad where > > data TrivialMonad a = M a > > recover :: TrivialMonad a -> a > recover (M x) = x > > instance Monad TrivialMonad where > > (M x) >>= f = f x > (M x) >> f = f > return x = M x > fail s = undefined > > This is actually a surprisingly usefull little sucker- it allows you to > "demonadify" code. Which is usefull when you have some places where you > want to use the code within a monad, and some places where you don't. You > write the base bit of code monadically, and then demonadify it as needed. > > The first question I have is it is possible to implement this guy without > wrapping the value in a constructor? What I'd like to do is replace the: > data TrivialMonad a = M a > with something like: > type TrivialMonad a = a > and then be able to junk the recover function.
No, but you can use a newtype instead of data, so you have no run-time overhead. > > The second question I have is: is there any hope of getting something like > this into the standard library? It's already there: Control.Monad.Identity > > Thanks, > Brian > Cheers, Daniel _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
