[Haskell-cafe] Hopefully simple monad question

Gregory Propf gregorypropf at yahoo.com
Wed Sep 16 06:23:30 EDT 2009

I'm playing around with a little program that implements a simple virtual machine.  I want to use a monad to represent machine state.  I created a data type for the machine (VM) and a monadic type for the monadic computations using it.  I declared this an instance of MonadState and Monad and created the usual operators.  That stuff works.  My issue is that I want to run some functions in the machine monad, call it VMS - "virtual machine w/state" and then pull the underlying VM data structure out and print it.

I've read about monad transformers, lift, liftM, liftIO and all these instances in the libraries like MonadIO and am rather confused.  The most sensible conclusion I can reach is that I probably need to create my own Transformer monad and define liftIO.  Is this where I need to go?  Also, my VMS monad doesn't really do anything different from the State monad except explicitly specify that state is a VM and not a generic type.  Am I doing too much work creating my own instances here?  Would a simple "type" statement work?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090916/e5242cd1/attachment.html

More information about the Haskell-Cafe mailing list