Proposal: give Ptr a nominal role

David Feuer david.feuer at gmail.com
Sun Nov 4 13:28:17 UTC 2018


Pattern synonyms can be bundled with type constructors these days.

On Sun, Nov 4, 2018, 7:01 AM Bertram Felgenhauer via Libraries <
libraries at haskell.org wrote:

> Carter Schonwald wrote:
> > https://ghc.haskell.org/trac/ghc/ticket/9163 seems to talk about *why*
> Ptr
> > being phantom actually has a pretty measurable impact on code. (cast ptr
> > becomes a noop and this has a measurable impact on a number of
> application
> > measures)
>
> David's point, I believe, is that the same performance problem could
> have been solved by turning Ptr into a newtype, without giving up the
> representational that it had before. In fact he brought this up in the
> same trac ticket,
>
>     https://ghc.haskell.org/trac/ghc/ticket/9163#comment:38
>
> >>>>On Tue, Oct 30, 2018 at 5:57 PM David Feuer <david.feuer at gmail.com>
> >>>>wrote:
> >>>>> 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.
>
> This will break some imports, since
>
>   import GHC.Ptr (Ptr (..))
>
> will not import the pattern synonym. This is how Ptr is imported in
> both bytestring and vector. But it's not a big deal, I suppose.
>
> Cheers,
>
> Bertram
> _______________________________________________
> 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/20181104/55821104/attachment.html>


More information about the Libraries mailing list