Fw: Question aboutthe use of an inner forall
Mon, 19 Aug 2002 13:15:40 -0500
Jan Brosius <firstname.lastname@example.org> 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.