[Haskell-cafe] Pointer equality for nullary constructors

Edward Kmett ekmett at gmail.com
Mon Feb 12 03:37:42 UTC 2018


Keep in mind a newtype of Foo will have a different TypeRep, but will
compare as equal under reallyUnsafePtrEquality#.

-Edward

On Sun, Feb 11, 2018 at 5:14 AM, David Feuer <david.feuer at gmail.com> wrote:

> Can I use reallyUnsafePtrEquality# reliably to identify whether a value is
> a nullary constructor of a particular type? For example, if I have
>
> data Foo = Foo
>
> Can I write
>
> isFoo :: a -> Bool
> isFoo !a = isTrue# (reallyUnsafePtrEquality# a Foo)
>
> instead of
>
> isFoo :: forall a. Typeable a => a -> Bool
> isFoo a
>   | Just Refl <- eqTypeRep (typeRep @a) (typeRep @Foo)
>   , Foo <- a
>   = True
>   | otherwise = False
>
> The reason I'm asking is because this would let me (potentially) raiseIO#
> a nullary constructor and then catch# it and see if it was what I was
> looking for rather than having to open a SomeException to get to an
> Exception dictionary, open that to get a TypeRep, and then peer inside that
> to check a Fingerprint. That is, I'd get lighter-weight exceptions that
> only carry the information I actually need.
>
> Thanks,
> David
>
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20180211/761edd20/attachment.html>


More information about the Haskell-Cafe mailing list