Define `Data` instance for `Natural` type (#9818)
authorHerbert Valerio Riedel <hvr@gnu.org>
Tue, 25 Nov 2014 22:23:08 +0000 (23:23 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Wed, 26 Nov 2014 08:03:52 +0000 (09:03 +0100)
This follows the same style as the other integral `Data` instances
defined in the `Data.Data` module.

Reviewed By: ekmett

Differential Revision: https://phabricator.haskell.org/D526

libraries/base/GHC/Natural.hs

index e9b37b1..221bc31 100644 (file)
@@ -67,6 +67,7 @@ import GHC.Enum
 import GHC.List
 
 import Data.Bits
+import Data.Data
 
 default ()
 
@@ -588,3 +589,16 @@ naturalToWordMaybe (Natural i)
   where
     maxw = toInteger (maxBound :: Word)
 #endif
+
+-- This follows the same style as the other integral 'Data' instances
+-- defined in "Data.Data"
+naturalType :: DataType
+naturalType = mkIntType "Numeric.Natural.Natural"
+
+instance Data Natural where
+  toConstr x = mkIntegralConstr naturalType x
+  gunfold _ z c = case constrRep c of
+                    (IntConstr x) -> z (fromIntegral x)
+                    _ -> error $ "Data.Data.gunfold: Constructor " ++ show c
+                                 ++ " is not of type Natural"
+  dataTypeOf _ = naturalType