<div dir="auto">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<div dir="auto"><br></div><div dir="auto">data RuntimeRep</div><div dir="auto">  = PtrRep Liftedness</div><div dir="auto">   | ...</div><div dir="auto"><br></div><div dir="auto">But that would only work for primops (at least for now) so it may not be worth the breakage.</div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Aug 22, 2018, 7:45 AM Ben Gamari <<a href="mailto:ben@smart-cactus.org">ben@smart-cactus.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank" rel="noreferrer">simonpj@microsoft.com</a>> writes:<br>
<br>
> |  Huh! It looks like what we currently do for some primops is just use a<br>
> |  totally bogus kind. For example, mkWeak# will happily accept an Int# as<br>
> |  its first argument.<br>
><br>
> Well, I see<br>
>   primop  MkWeakOp "mkWeak#" GenPrimOp<br>
>      o -> b -> (State# RealWorld -> (# State# RealWorld, c #))<br>
><br>
> and I believe (from Ben's message) that the "o" means "open type variable",<br>
> which is the old terminology for what we now call levity-polymorphic.<br>
><br>
Right; currently (largely for historical reasons) we use `o` to<br>
accommodate cases that accept both lifted and unlifted pointers. <br>
<br>
Cheers,<br>
<br>
- Ben<br>
<br>
</blockquote></div>