On Mon, Nov 21, 2011 at 2:13 PM, Tim Baumgartner <baumgartner....@googlemail.com> wrote: > Free Monads. It's amazing to be confronted again with notions I learned more > than ten years ago for groups. I have to admit that I'm probably not yet > prepared for a deeper understanding of this, but hopefully I will return to > it later ;-) > Is Cont free as well? I guess so because I heard it's sometimes called the > mother of all monads.
As I understand it, Cont is not a free monad, but there is a connection between the ideas. Certainly, any free monad can be easily reimplemented using Cont. Here's how you might implement your monad using Cont, type InteractionM a b = Cont (Interaction a b) exit b = Cont $ \k -> Exit b output b = Cont $ \k -> Output b (k ()) input = Cont $ \k -> Input k runM m = runCont m Exit That's very similar to the free monad's implementation, only with the continuation replacing Val. exit b = Wrap $ ExitF b output b = Wrap $ OutputF b (Val ()) input = Wrap $ InputF Val runM m = foldFree Exit roll m The Cont-based version has essentially taken the work performed in foldFree and distributed it to return and (>>=). This eliminates the intermediate data structures, resulting in a more efficient implementation. -- Dave Menendez <d...@zednenem.com> <http://www.eyrie.org/~zednenem/> _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe