Proposal: give Ptr a nominal role

Carter Schonwald carter.schonwald at gmail.com
Fri Nov 2 23:25:24 UTC 2018


my understanding is ANY non phantom role suffices in this case ..

i dont use the coercible class in this context, my main concern is how role
selection will impact client type classes / GND / etc

On Fri, Nov 2, 2018 at 6:34 AM Matthew Pickering <
matthewtpickering at gmail.com> wrote:

> Making `Ptr` (and ForeignPtr) have a nominal role would have prevented
> recent bugs where it was possible to coerce Vectors between any types.
>
> See: https://github.com/haskell/vector/pull/224
> and: https://phabricator.haskell.org/D4941
> On Tue, Oct 30, 2018 at 5:57 PM David Feuer <david.feuer at gmail.com> wrote:
> >
> > Currently, we have
> >
> > data Ptr a = Ptr Addr#
> > type role Ptr phantom
> >
> > This is weird: accidentally coercing a pointer to a different type is
> very bad. The only reason Ptr has this role is that without it, castPtr and
> such may not be free or will involve unsafe coercions.
> >
> > Thankfully, we have enough power to fix this now.
> >
> >     data Addr = Ptr_ Addr#
> >
> >     newtype Ptr a = Ptr_ Addr
> >     type role Ptr nominal
> >
> >     pattern Ptr :: Addr# -> Ptr a
> >     pattern Ptr a# = Ptr_ (Addr a#)
> >
> >     castPtr :: Ptr a -> Ptr b
> >     castPtr (Ptr a) = Ptr a
> >
> >     ptrCoercible
> >       :: ((forall a b. Coercible (Ptr a) (Ptr b)) => r)
> >       -> r
> >     ptrCoercible r = r
> >
> >     ptrCoercion :: Coercion (Ptr a) (Ptr b)
> >     ptrCoercion = Coercion
> >
> > I propose that we do this.
> > _______________________________________________
> > Libraries mailing list
> > Libraries at haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20181102/6747fe90/attachment.html>


More information about the Libraries mailing list