> > The type constructor F and the type constructor (->) are quite different. > They have the same kind, but just as the type only tell you part of what a > value > is, thekind only tells you part of what a type is. > Very informally a value of type "F a b" means "I have an a and a b", whereas > as type "a -> b" means "if you give me an a I'll give you a b". So the > function > arrow "consumes" its first argument rather than produces it. >
Then either -> is not a type constructor, or the concept of type constructors has to be divided into two : consuming type constructors, and producing type constructors. If so then language has to support a way to define consuming type constructors as well, in order to be consistent within itself. I think -> is defined to be a type constructor to make functions first class values. In the meantime, type systems that support subtyping seem to treat the arrow in a special fashion. For example if A <: B and C <: D then (B -> C) <: (A -> D) where a <: b indicates 'a' being a subtype of 'b' Now do you get the impression that the subtype relation is defined over a type-constructor here? What about other type constructors then? Thanks _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
