Unlifted primop types

David Feuer david.feuer at gmail.com
Wed Aug 22 13:59:06 UTC 2018


The problem is that this also accepts things that aren't pointers at all!
We could fix that *for primops* by changing RuntimeRep to something like

data RuntimeRep
  = PtrRep Liftedness
   | ...

But that would only work for primops (at least for now) so it may not be
worth the breakage.

On Wed, Aug 22, 2018, 7:45 AM Ben Gamari <ben at smart-cactus.org> wrote:

> Simon Peyton Jones <simonpj at 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20180822/631d8c22/attachment.html>


More information about the ghc-devs mailing list