Fw: Question aboutthe use of an inner forall

Jon Cast jcast@ou.edu
Mon, 19 Aug 2002 13:15:40 -0500

Jan Brosius <jscott@planetinternet.be> wrote:
> Still some question: Ok a is not a type but Integer is a type .
> But a can be instantiated to integer. This comes pretty close to
> call a therefore a type variable, Isn't it?

> And otherwise why writing forall a etc.

If s, t are types, the type s -> t says ``give me a value of type s,
and I'll give you a value of type t''.  If a is a type variable, and
(given a is a type) s is a type, then forall a. s says ``give me a
type t, and I'll give you a value of type s[t]''.

More specifically, if you write

> f :: a -> b

f has the form (\ x :: a -> (y :: b)), where the \ binds values.

If you write

> f :: forall a. a

f has the form (/\ a -> (x :: a)), where the /\ binds types.

Now, runST's argument has type forall s. ST s a.  In other words, it's
essentially a function over types---and it has to take /any/ type
runST wants to hand it.

> Regards

> Scott

Jon Cast