The content of Fun is actually the type: Context -> Value -> (Context, Value). If you flip the arguments, you get: Value -> Context -> (Context, Value). The (Context -> (Context, Value)) is actually the State type: State s a = s -> (s, a) I modified your code to use this type. During the process, I encountered some peculiar things (and factored out some things), see comments in code. https://gist.github.com/950445 Fu…
You broke car and cdr somehow (these don't evaluate their arguments anymore), but I have no idea how you did this.
This was mostly a training exercise, this is why there is no significant use of monads in there: I simply haven't learned enough about them to feel comfortable using them.