Unlifted primop types
Simon Peyton Jones
simonpj at microsoft.com
Thu Aug 23 21:43:11 UTC 2018
Gah. We have no way to be polymorphic over all pointers (both lifted and unlifted) but not over Int# etc.
As you say, this is too much of a special case to make an invasive change.
I’m quite dubious about making weak poitners to unlifted heap-allocated objects. I can’t say it’s wrong but it feels dodgy to me.
Simon
From: David Feuer <david.feuer at gmail.com>
Sent: 22 August 2018 14:59
To: Ben Gamari <ben at smart-cactus.org>
Cc: Simon Peyton Jones <simonpj at microsoft.com>; David Feuer <david at well-typed.com>; ghc-devs <ghc-devs at haskell.org>
Subject: Re: Unlifted primop types
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<mailto:ben at smart-cactus.org>> wrote:
Simon Peyton Jones <simonpj at microsoft.com<mailto: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/20180823/85419e2f/attachment.html>
More information about the ghc-devs
mailing list