Anders Kaseorg wrote:
> • Can a class like this be expressed in Haskell ’98? (But this seems to
> be quite difficult, and I imagine we’ll be thinking about it for a while.)
I don't think[1] so. Fundamentally the problem is that you need to
support both (things like) ReaderT and (things like) WriterT. That is,
the portion of the type which is under IO (or could commutatively be
made so) varies from monad to monad. Thus, it seems necessary to use
extensions like rank-n (to abstract over the different structures) or
MPTCs / associated types (to define relations on types).
The original liftIO gets around this problem because the input is a
"pure" term (wrt the monad it's being lifted into) and therefore we
don't have any structure to worry about traversing/manipulating.
[1] But I've been wrong before:
http://www.comlab.ox.ac.uk/jeremy.gibbons/publications/fast+loose.pdf
--
Live well,
~wren