[Haskell-beginners] Re: Type classes are not like interfaces, after all

Eric Macaulay eeoam at ukfsn.org
Sat Jan 24 08:28:41 EST 2009

Francesco Bochicchio <bieffe62 <at> gmail.com> writes:

> It worked well ... unitil yesterday. Then I discovered that this piece
> of code (1) is illegal in askell (ghc gives the 'rigid type variable'
> error)

> a :: Num n => n
> a = 3 :: Integer 

A way to understand the type of a is that it has an implicit parameter:

a :: {n:Type} -> Num n -> n

Now we can see why the definition you gave doesn't work - the type n is
provided by the caller of your function which *must* return a value of
that type. If your function was called with

a {Float} _ 0.0

then you must return a Float. Your definition specifically declares you
return an integer, which is wrong.

Hope this helps,

More information about the Beginners mailing list