the read only "state" monad is usually called "environment", or "reader" monad. since it is goind to be "read-only" there is no need to return a new state in the result (as it would presumably be the same as the input state). so the type becomes:
newtype Env e a = E (e -> a)
for something simillar to what you have take a look at
the Hugs/GHC monad transformer libraries, or at www.cse.ogi.edu/~diatchki/MonadTransformers
bye iavor
Amit Garg wrote:
Hey all.
I am trying to declare a read-only state monad and a read-write state monad, so as to distinguish between methods on a data type that are read-only vs. read-write.
This is the best I could come up with:
newtype ST s a = ST ( s -> (s,a) ) -- read-only newtype SW s a = SW ( s -> (s,a) ) -- read-write
class ReadM m s a where readM :: m s s runM :: s -> m s a -> (a,s)
class WriteM m r s where updateM :: (s -> s) -> m s ()
instance ReadM ST s a where readM = ST (\s -> (s,s)) runM s (ST c) = c s -- Doesn't work
instance ReadM SW s a where readM = SW (\s -> (s,s)) runM s (SW c) = c s -- Doesn't work
And later on ... updateM s (SW c) = c s
Does that make sense? If not, how do I do it? If so, is there a simpler means of getting there? Thanks.
;Amit ------------------------------------------------------------------- Amit Garg | Office: ACES 6SEo4E Graduate Student | Phone : (512) 232-7875 Computer Sciences | Res : 2000 Pearl St. #209 University of Texas at Austin | Phone : (512) 659-2532 Homepage: http://www.cs.utexas.edu/~amitji -------------------------------------------------------------------
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
-- ================================================== | Iavor S. Diatchki, Ph.D. student | | Department of Computer Science and Engineering | | School of OGI at OHSU | | http://www.cse.ogi.edu/~diatchki | ==================================================
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
