On Saturday 13 October 2007, Albert Y. C. Lai wrote: > jeff p wrote: > > I think this is referring to Andrzej Filinski's paper "Representing > > Layered Monads" in which it shown that stacks of monads can be > > implemented directly (no layering) by using call/cc and mutable state. > > I have been unable to see how to bring its crucial "reify" and "reflect" > to Haskell. In particular reflect: > > reflect :: m a -> a > > It looks very magical.
Here: http://cs.ioc.ee/mpc-amast06/msfp/filinski-slides.pdf are some slides Filinski made about doing monadic reflection in Haskell (there might be a corresponding paper, but a cursory googling didn't find it). The thing is, 'reflect' in Haskell doesn't have type 'm a -> a' It has type something like: m a -> ContState a However, in the languages he usually works with, everything is already implicitly in a ContState monad, in that they have mutable references and native continuations. Hence the type 'm a -> a' there. At least, I think that's the explanation. -- Dan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe