[Haskell-cafe] MonadRandom and traversing infinite streams

Petr Pudlák petr.mvd at gmail.com
Sat May 31 18:58:40 UTC 2014

Hi Brent and Wouter,

looking at SO questions


threre are monads and applicative functors that support

sequenceInf :: S.Stream (f a) -> f (S.Stream a)

that is, allow lazy traversals of streams (infinite lists). Namely those
that don't produce any additional output.

And instances of MonadRandom seem to have valid implementations of
`sequenceInf`, which would allow to produce lazy infinite randomized lists
(basically a generalization of `getRandoms`).

My proposal is to add

class Applicative f => LazyApplicative f where
    sequenceInf :: S.Stream (f a) -> f (S.Stream a)
    sequenceInf = traverseInf id

    traverseInf :: (a -> f b) -> S.Stream a -> f (S.Stream b)
    traverseInf f = sequenceInf . S.map f

to a module in Stream package (for example `Control.Applicative.Lazy`), and
add its instances into `MonadRandom`.

What do you think? I'd be willing to send patches.

  Best regards,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140531/fabd78e9/attachment.html>

More information about the Haskell-Cafe mailing list