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?



      
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to