[Haskell-beginners] type constructors

Michael P Mossey mpm at alumni.caltech.edu
Sat Aug 1 13:44:49 EDT 2009

I was playing around with type constructors and I wrote this:

data Foo a b = Foo1 [a]
              | Foo2 (a -> b)

t3 = Foo1 [1, 2, 3]

I wanted to see what ghci thought the type of t3 was. Essentially, it's data 
that doesn't use all of the type variables. So this ran fine, and

*Main> :t t3
t3 :: Foo Integer b

Wow! The data exists but it doesn't have a "complete type" so to speak. This 
worked, too:

f3 (Foo1 xs) = length xs

*Main> f3 t3

This is surprising to a conventional programmer. But does this naturally relate 
to other features of Haskell. Perhaps laziness? (I.e. data of type Foo doesn't 
always need a type b so it just doesn't have one until it needs one.)


More information about the Beginners mailing list