
Matthias
"Type Constructors and data Constructors are in separate namespaces. [example]"
But according to the chapter (2.2.1) "Recursive Types" i see the polymorphic definition of a tree is:
data Tree a = Leaf a | Branch (Tree a) (Tree a)
where (Tree a) is obviously the data-constructor out of "the other namespace". I guess that the ()
The parentheses are only for delimiting, and I think you're making this more complex than it really is. Read the declaration as "a Tree of 'a's (or perhaps "over 'a'"?) is either a Leaf containing an 'a', or a Branch containing two (sub)Trees of 'a's (over 'a')."
Also i would not regret some hints about "->" which is used in function-type-definitions. I would prefer writing
plus :: a,a -> a
Feel free, only in order to make it a tuple, you need the parentheses: plus :: (a,a) -> a is a perfectly valid declaration. But keep in mind that plus :: a -> a -> a is really a function that takes an 'a' and returns another function plus' :: a -> a that can take an 'a' and return an 'a'. So, with the usual + operator defined like this, we can do cool stuff like increment = (+1) and do increment 4 => 5 map increment [1,2,3] => [2,3,4] -kzm -- If I haven't seen further, it is by standing in the footprints of giants