
I had a similar problem, but that was because I needed to use the constructors. MonadState has the methods you are using just write your code requiring MonadState as both State and StateT are instances. next_random_probability :: ( ..., MonadState g m) => m a
From: "Mark T.B. Carroll"
To: haskell-cafe@haskell.org Subject: Writing for both State and StateT Date: Tue, 22 Apr 2003 07:48:57 -0400 (EDT) At the moment I have code like,
next_random_probability :: (RandomGen g, Num a, Random a) => State g a
next_random_probability = do old_rng <- get let (random_probability, new_rng) = randomR (0, 1) old_rng put new_rng return random_probability
next_random_probabilityT :: (RandomGen g, Num a, Random a, Monad m) => StateT g m a
next_random_probabilityT = do old_rng <- get let (random_probability, new_rng) = randomR (0, 1) old_rng put new_rng return random_probability
Because these just use get and put which are both from MonadState, is it possible to write just one next_random_probability with a more general type signature, maybe mentioning MonadState, or at least two wrappers that call the same worker function, so that the same code is good for both State and StateT?
-- Mark
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_________________________________________________________________ Protect your PC - get McAfee.com VirusScan Online http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963

On Tue, 22 Apr 2003, Derek Elkins wrote:
I had a similar problem, but that was because I needed to use the constructors. MonadState has the methods you are using just write your code requiring MonadState as both State and StateT are instances.
next_random_probability :: ( ..., MonadState g m) => m a (snip)
Works perfectly, thanks very much! That must be the only combination I didn't try. (-: No doubt it'll all be clearer when I better understand what's going on! -- Mark
participants (2)
-
Derek Elkins
-
Mark T.B. Carroll