Add `Data` instance for `Data.Version`
authorHerbert Valerio Riedel <hvr@gnu.org>
Fri, 13 Sep 2013 09:19:36 +0000 (11:19 +0200)
committerHerbert Valerio Riedel <hvr@gnu.org>
Fri, 13 Sep 2013 09:19:36 +0000 (11:19 +0200)
See also

  http://permalink.gmane.org/gmane.comp.lang.haskell.libraries/20269

Patch from Edward Kmett (essentially.)

Authored-by: Edward Kmett <ekmett@gmail.com>
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Data/Data.hs

index 29760b2..2813886 100644 (file)
@@ -110,6 +110,7 @@ import Prelude -- necessary to get dependencies right
 
 import Data.Typeable
 import Data.Maybe
+import Data.Version( Version(..) )
 import Control.Monad
 
 -- Imports for the instances
@@ -1338,3 +1339,20 @@ instance (Typeable a, Data a) => Data (a :=: a) where
                       _ -> error "Data.Data.gunfold(:=:)"
   dataTypeOf _    = equalityDataType
   dataCast2 f     = gcast2 f
+
+-----------------------------------------------------------------------
+-- instance for Data.Version
+
+versionConstr :: Constr
+versionConstr = mkConstr versionDataType "Version" ["versionBranch","versionTags"] Prefix
+
+versionDataType :: DataType
+versionDataType = mkDataType "Data.Version.Version" [versionConstr]
+
+instance Data Version where
+  gfoldl k z (Version bs ts) = z Version `k` bs `k` ts
+  toConstr (Version _ _) = versionConstr
+  gunfold k z c = case constrIndex c of
+                    1 -> k (k (z Version))
+                    _ -> error "Data.Data.gunfold(Version)"
+  dataTypeOf _  = versionDataType