Michael Roth wrote:
while trying to learn the secrets of monads, I decided to write a simply
monand for pure educational purpose. But it turned out that it isn't as
easy as I thought... I circumnavigate quite a number of hurdles but now
I reached a point where I'm at a loss. :-(

        data Stack a = Stack { run :: [a] -> (a, [a]) }

This definition means that the values in the stack are always of the same type as the values returned by the monadic computation. Try something like

  data Stack s a = Stack { runStack :: [s] -> (a, [s]) }

and

  instance Monad (Stack s) where
    ...

to thread the same stack through a monadic computation with various intermediate result types, as you probably want.

  Tillmann
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to