At the risk of seeming terribly naive, I'm going to go ahead and share my intuition. Would not any function of type (forall a. a -> b) be a constant function in b? If the function is allowed no inspection of its argument, it must not depend on its argument. The same intuition could be applied to the codomain. The type (forall a. m a -> m b) would tell me that this function is not allowed to inspect the carrier of its input type. I would need to know more about the type variable m in order to suggest what this function could do. E.G. if m were required to be a functor, then the function could be: theFun :: Functor m => (forall a. a -> b) -> (forall a. m a -> m b) theFun f m_a = fmap f m_a Is this the sort of pondering you were after? Gurus: did I miss something? On 2/27/07, Jacques Carette <carette@mcmaster.ca> wrote:
Since my last query was answered so quickly, let's try another.
I have looked on Hoogle. I would have asked Djinn, but I don't have it around. So, can someone find a term that inhabits (forall a. a -> b) -> (forall a. m a -> m b) ? I think of this as the type of functions that, given a function from any boxed-up a to a b, will give me a function from a boxed-up ma to a m b -- m does not have to be a Monad!.
Jacques _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe