
Leaf and Branch are type-constructors, and "Tree a" is a parametrized type.
I think this is wrong. Leaf and Branch are *data* constructors, and Tree is, indeed, a type constructor.
From http://www.haskell.org/all_about_monads/html/meet.html :
Type constructors To understand monads in Haskell, you need to be comfortable dealing with type constructors. A type constructor is a parameterized type definition used with polymorphic types. By supplying a type constructor with one or more concrete types, you can construct a new concrete type in Haskell. In the definition of Maybe: data Maybe a = Nothing | Just a Maybe is a type constructor and Nothing and Just are data constructors. You can construct a data value by applying the Just data constructor to a value: country = Just "China" In the same way, you can construct a type by applying the Maybe type constructor to a type: lookupAge :: DB -> String -> Maybe Int Best regards, Ricardo Carnieri