> My three eurocents. > I believe that the Author of the original query won't care more about > undefined stuff than most of us. He wants truly polymorphic functions, > of the type, say, a->b->a etc., without constraints. > > The answer exists, although it is not always trivial to find interesting > examples. > > Imagine a (postulated) polymorphic type, say, (a->b)->(b->a) . Consider > the symbol (->) to be an implication in logic. Ask yourself; "is it > a tautology, valid for *any* objects of types "a" or "b"? If yes, then > this is a type, and you can in principle find a model for it. > > Example: composition > > type: (a->b)->(c->a) -> (c->b) > function: (.) > (.) f g x = f (g x) > > On the other hand the "type" (a->b) is *NOT* a valid theorem. This is not > a type. You won't find any model of it. No, no, get out with your > f x = undefined. > > The "subst" combinator: subst f g x = f x (g x) has the type > > (a->b->c) -> (a->b) -> a -> c (unless I've produced some mistake)
The time you grouped (a->b->c), you utilized the arrow type constructor to build a function type, it is no different that using a polymorphic list. I think I am not happy with the dual semantics of this arrow thingie. I have to ponder on this some more, I guess. Thanks for the response. Greatly appreciated. _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
