Simon Peyton Jones <simonpj@microsoft.com> writes:
> | Huh! It looks like what we currently do for some primops is just use a
> | totally bogus kind. For example, mkWeak# will happily accept an Int# as
> | its first argument.
>
> Well, I see
> primop MkWeakOp "mkWeak#" GenPrimOp
> o -> b -> (State# RealWorld -> (# State# RealWorld, c #))
>
> and I believe (from Ben's message) that the "o" means "open type variable",
> which is the old terminology for what we now call levity-polymorphic.
>
Right; currently (largely for historical reasons) we use `o` to
accommodate cases that accept both lifted and unlifted pointers.
Cheers,
- Ben