Writing for both State and StateT
Derek Elkins
ddarius86@hotmail.com
Tue, 22 Apr 2003 12:35:14 -0400
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" <Mark.Carroll@Aetion.com>
>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