Iago Abal avatar Iago Abal committed 9755ba4

Add "Typeable BV" and "Data BV" instances

Comments (0)

Files changed (1)

Data/BitVector.hs

 import Data.Bits
 import Data.List ( foldl1' )
 import Data.Ord
+import Data.Typeable ( Typeable(..), mkTyConApp, mkTyCon3 )
+import Data.Data 
+  ( Data(..), Fixity(Prefix)
+  , constrIndex, indexConstr, mkDataType, mkConstr 
+  )
 
 ----------------------------------------------------------------------
 --- Bit-vectors
 
 instance Show BV where
   show (BV n a) = "[" ++ show n ++ "]" ++ show a
+ 
+instance Typeable BV where
+  typeOf _ = mkTyConApp bvTyCon []
+    where bvTyCon = mkTyCon3 "bv" "Data.BitVector" "BV"
+
+instance Data BV where
+  gfoldl k r (BV x1 x2) = r BV `k` x1 `k` x2
+  gunfold k z c
+    = case constrIndex c - 1 of
+          0 -> k $ k $ z BV
+          i -> error $ "Data.gunfold for BV, unknown index: " ++ show i
+  toConstr x@BV{} = indexConstr (dataTypeOf x) 1
+  dataTypeOf _ = ty
+    where ty = mkDataType "Data.BitVector.BV" 
+                  [mkConstr ty "BV" ["size", "nat"] Prefix]
 
 ----------------------------------------------------------------------
 --- Construction
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.