dataToTag# documentation

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

dataToTag# documentation

David Feuer-2
dataToTag# is documented as getting the tag number of an enumeration,
which is perfectly reasonable because it's designed to support deriving Enum.
But it *appears* to work also for non-enumeration datatypes:

dataToTag# Nothing = 0#
dataToTag# (Just 3) = 1#

Does this actually always work? If so, should that be documented, or is there
a realistic possibility that its behavior will change in the future?

Additionally: the documentation for dataToTag# urges readers to use
GHC.Base.getTag instead. But dataToTag# is exported from the "public"
GHC.Exts, whereas getTag is not. Should we add getTag to GHC.Exts,
or change the documentation for dataToTag#?

David
_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: dataToTag# documentation

GHC - devs mailing list
Based on memory rather that investigation:

- yes it works on any data type

- The reason that the primop dataToTag# is dangerous is that it does
  not evaluate its argument; it relies on the wrapper getTag to do
  so.    Caveat emptor!  It would be good to document this.

Simon

|  -----Original Message-----
|  From: ghc-devs [mailto:[hidden email]] On Behalf Of
|  David Feuer
|  Sent: 02 August 2017 03:04
|  To: [hidden email]
|  Subject: dataToTag# documentation
|  
|  dataToTag# is documented as getting the tag number of an enumeration,
|  which is perfectly reasonable because it's designed to support
|  deriving Enum.
|  But it *appears* to work also for non-enumeration datatypes:
|  
|  dataToTag# Nothing = 0#
|  dataToTag# (Just 3) = 1#
|  
|  Does this actually always work? If so, should that be documented, or
|  is there a realistic possibility that its behavior will change in the
|  future?
|  
|  Additionally: the documentation for dataToTag# urges readers to use
|  GHC.Base.getTag instead. But dataToTag# is exported from the "public"
|  GHC.Exts, whereas getTag is not. Should we add getTag to GHC.Exts, or
|  change the documentation for dataToTag#?
|  
|  David
|  _______________________________________________
|  ghc-devs mailing list
|  [hidden email]
|  https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.h
|  askell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-
|  devs&data=04%7C01%7Csimonpj%40microsoft.com%7C769c2a45735642edd36508d4
|  d94a767e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C6363723612191322
|  18%7CUnknown%7CVW5rbm93bnx7IlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjo
|  iT3RoZXIifQ%3D%3D%7C-
|  1&sdata=585d0E3YyeKBk3DYqpvWR8ePnMR6bJ6%2Bu6dAGYk%2BNxo%3D&reserved=0
_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Loading...