Why is this function type-correct

Jon Fairbairn Jon.Fairbairn@cl.cam.ac.uk
Mon, 04 Mar 2002 14:25:00 +0000


"Rijk J. C. van Haaften" <rjchaaft@cs.uu.nl>
wrote:
> Recently, I wrote a function similar to
> =

> x :: a
> x =3D x 42
> =

> which is type-correct (Hugs, Ghc, THIH).
> Still, from the expression it is clear
> that the type shoud have a function type.
> The definition
> =

> x :: a -> b
> x =3D x 42
> =

> is equally well accepted, though I can't
> see why this type would be correct. (I'd
> expect it to be too general.)
> =

> For what reasons are these types considered
> correct?

When you say

x :: a

you are asking that the compiler check that everything you
say about x is consistent with x being acceptable where
/any/ type is required.

In the application x 42, it requires that x be a function,
which is fine, because x has any type, and this includes
functions. When you say x =3D x 42, this requires that the
type returned from x 42 is the same as the type of x, again
fine because if x::a, then x:: Integer -> a also, so x 42:: a.

It works out in practise because x =3D x 42 gives x the value
bottom, and bottom::a for all a.
 =


  J=F3n

-- =

J=F3n Fairbairn                                 Jon.Fairbairn@cl.cam.ac.u=
k
31 Chalmers Road                                         jf@cl.cam.ac.uk
Cambridge CB1 3SZ            +44 1223 570179 (after 14:00 only, please!)