[Haskell-cafe] Combining State and List Monads

Edward Z. Yang ezyang at MIT.EDU
Sat Aug 25 07:58:39 CEST 2012


Ah, egg in my face, I appear to have misremembered how ListT is implemented ^_^
http://www.haskell.org/haskellwiki/ListT_done_right may be relevant.

Edward

Excerpts from Edward Z. Yang's message of Sat Aug 25 01:51:40 -0400 2012:
> Hello Henry,
> 
> In such cases, it is often worth thinking about how you would implement
> such a scheme manually, without using pre-existing monads.  You will
> quickly see that the two candidate types:
> 
>     s -> ([a], s)
>     [s -> (a, s)]
> 
> both will not work (exercise: what semantics do they give?)  In fact,
> you must use continuation passing style, and you must "resume" the
> computation with the latest state value you would extracted from the
> last run.  See the LogicT monad for how to implement list-like monads in
> continuation passing style.
> 
> Cheers,
> Edward
> 
> Excerpts from Henry Laxen's message of Sat Aug 25 00:35:37 -0400 2012:
> > Dear Cafe,
> > 
> > It seems to me there should be some simple way of doing this, but thus
> > far it eludes me.  I am trying to combine the State and List monads to
> > do the following:
> > 
> > countCalls = do
> >   a <- [1..2]
> >   b <- [1..2]
> >   modify (+1)
> >   return (a,b)
> > 
> > 
> > where with some combination of ListT, StateT, List, State, or who
> > knows what would result in:
> > 
> > ([(1,1),(1,2),(2,1),(2,2)],4)
> > 
> > assuming we initialize the state to 0
> > 
> > Is there any way to make this happen?
> > Thanks in advance.
> > 
> > Henry Laxen
> > 



More information about the Haskell-Cafe mailing list