[Haskell-cafe] Monad transformer: apply StateT to List monad

Daniel Fischer daniel.is.fischer at googlemail.com
Thu Jan 13 21:44:28 CET 2011


On Thursday 13 January 2011 21:17:41, michael rice wrote:
> {- From: http://en.wikibooks.org/wiki/Haskell/Monad_transformers
> if for instance we apply StateT to the List monad, a function that
> returns a list (i.e., a computation in the List monad) can be lifted
> into StateT s [], where it becomes a function that returns a StateT (s
> -> [(a,s)]). That is, the lifted computation produces multiple
> (value,state) pairs from its input state. -}
>
> import Control.Monad.Trans.State.Lazy
>
> type GeneratorState = StateT Int
>
> -- a function in the list monad
> f :: Int -> [Int]
> f n = [0..n]
>
> Will someone please demonstrate the above comment from the wiki page.

lift (f n) = StateT (\s -> [(k,s) | k <- [0 .. n]])

Generally,

lift list = StateT (\s -> zip list (repeat s))

>
> Michael




More information about the Haskell-Cafe mailing list