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 > > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe