Suppose I have the following value constructor:
data Shape = Circle Float Float Float | Rectangle Float Float Float Float
Now I can run:
ghci> :t Circle
Circle :: Float -> Float -> Float -> Shape
Now I can write a type declaration
surface :: Shape -> Float
But I can't type a type declaration
surface :: Circle -> Float
This is because "Circle
is not a type, Shape
is"
My question is: Why are types declared in value constructors not types in Haskell?