>>49
--f :: Monad m => (m a -> m a) -> m (m a -> a)
f g = do {
h <- f id;
r <- return return;
r (h . \ x -> g x >>= (r . const) >>= \ c -> return (c x))
}
--f' :: Monad m => (a -> m b) -> m (a -> b)
f' g = f id >>= \ h -> return (h . g)