Hi Roelof,
I think you misunderstood it.
There are two things here: types and values (value-constructors). They exist in different world, not touching each other.
In Haskell, you define a type as:
data <Type_Name> = <ValueConstructor_Name> <Type_Name> <Type_Name> <Type_Name>
You can create values as:
let varName = <ValueConstructor_Name> <Value> <Value> <Value>
You need to put <Value> of some type, not type name itself in place of those <Value>s.
So, with datatype you provided, you have two data-constructors:
Leaf
and
Node <val> <val> <val>
You can create a leaf:
let leaf = Leav
or a node:
let node = Node Leaf "msg" Leaf
You can see that Node is a data-constructor that takes 3 values, not type-names as it's parameters.
Hope this helps.