monad library

Andrew J Bromage ajb@spamcop.net
Mon, 28 Jul 2003 10:50:13 +1000


G'day all.

On Fri, Jul 25, 2003 at 12:40:22AM +0200, Iavor Diatchki wrote:

> 1. there are the map* functions for different transformers (mapReader, 
> mapWriter, etc.). does anyone use them for anything?  while there is 
> something common between them, i am not quite sure exactly what it is.

I've used them once, and that was to swap the underlying monad of a
transformer.  It's occasionally handy, for example, when you want your
state to be backtrackable for a small part of your code, to stick a
backtracking monad _under_ the top monad transformer.

I don't think that you can duplicate this behaviour using the other
operations on the monad.

A simple solution would be to introduce this typeclass:

	class (MonadTrans t) => MonadMapTrans t where
	    mapTrans :: (m a -> n b) -> (t m a -> t n b)

I'm not happy with the names, but I'm sure someone can think of
something better.  It might even make sense as a method of MonadTrans
itself.

Cheers,
Andrew Bromage