Luke Palmer wrote: > Hector Guilarte <[email protected]> wrote: >> >> f:: [int] -> (a,[Int]) >> f randomList = >> let (usedRandomNumber,newRandomList) = g randomList >> in (usedRandomNumber,newRandomList) > > This pattern can be encapsulated in a monad: > > newtype RandM a = RandM { unRandM :: [Int] -> (a,[Int]) } > > instance Monad RandM where > [...] > > See the similarity? > > Of course, there is no need to implement this yourself. It is already > implemented as State [Int]. And as long as you are doing that, you > might as well use Rand from the MonadRandom package. In fact, I have > argued that you should use MonadRandom instead of the lower-level > System.Random whenever possible: > http://lukepalmer.wordpress.com/2009/01/17/use-monadrandom/
The rationale being that RandM a has a natural interpretation as "random variable of type a" with no reference to how it's actually implemented. Regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
