I tried doing this when learning Haskell, to minimize any connection to monads. For whatever reason, 'twasn't easy.<p>Then I tried it with Clojure, even though I don't have to, and it seemed a lot simpler. Just pass a map around with all the data in it, or whatever.