Add Data and Typeable instances
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Wed, 7 Apr 2010 01:09:55 +0000 (01:09 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Wed, 7 Apr 2010 01:09:55 +0000 (01:09 +0000)
Data/Primitive/Array.hs
Data/Primitive/ByteArray.hs
Data/Primitive/Types.hs

index 8b1d97a..484613e 100644 (file)
@@ -1,4 +1,4 @@
-{-# LANGUAGE MagicHash, UnboxedTuples #-}
+{-# LANGUAGE MagicHash, UnboxedTuples, DeriveDataTypeable #-}
 
 -- |
 -- Module      : Data.Primitive.Array
@@ -23,11 +23,15 @@ import Control.Monad.Primitive
 import GHC.Base  ( Int(..) )
 import GHC.Prim
 
+import Data.Typeable ( Typeable )
+import Data.Data ( Data(..), mkNoRepType )
+
 -- | Boxed arrays
-data Array a = Array (Array# a)
+data Array a = Array (Array# a) deriving ( Typeable )
 
 -- | Mutable boxed arrays associated with a primitive state token.
 data MutableArray s a = MutableArray (MutableArray# s a)
+                                deriving ( Typeable )
 
 -- | Create a new mutable array of the specified size and initialise all
 -- elements with the given value.
@@ -102,3 +106,13 @@ sameMutableArray :: MutableArray s a -> MutableArray s a -> Bool
 sameMutableArray (MutableArray arr#) (MutableArray brr#)
   = sameMutableArray# arr# brr#
 
+instance Typeable a => Data (Array a) where
+  toConstr _ = error "toConstr"
+  gunfold _ _ = error "gunfold"
+  dataTypeOf _ = mkNoRepType "Data.Primitive.Array.Array"
+
+instance (Typeable s, Typeable a) => Data (MutableArray s a) where
+  toConstr _ = error "toConstr"
+  gunfold _ _ = error "gunfold"
+  dataTypeOf _ = mkNoRepType "Data.Primitive.Array.MutableArray"
+
index 752bcf6..2bb16f2 100644 (file)
@@ -1,5 +1,5 @@
 {-# LANGUAGE MagicHash, UnboxedTuples, ForeignFunctionInterface,
-             UnliftedFFITypes #-}
+             UnliftedFFITypes, DeriveDataTypeable #-}
 
 -- |
 -- Module      : Data.Primitive.ByteArray
@@ -32,11 +32,15 @@ import Data.Word ( Word8 )
 import GHC.Base ( Int(..) )
 import GHC.Prim
 
+import Data.Typeable ( Typeable )
+import Data.Data ( Data(..), mkNoRepType )
+
 -- | Byte arrays
-data ByteArray = ByteArray ByteArray#
+data ByteArray = ByteArray ByteArray# deriving ( Typeable )
 
 -- | Mutable byte arrays associated with a primitive state token
 data MutableByteArray s = MutableByteArray (MutableByteArray# s)
+                                        deriving( Typeable )
 
 -- | Create a new mutable byte array of the specified size.
 newByteArray :: PrimMonad m => Int -> m (MutableByteArray (PrimState m))
@@ -173,3 +177,13 @@ foreign import ccall unsafe "memops.h memmove_off"
 foreign import ccall unsafe "memops.h memset_off"
   memset_mba :: MutableByteArray# s -> CInt -> CInt -> CSize -> IO ()
 
+instance Data ByteArray where
+  toConstr _ = error "toConstr"
+  gunfold _ _ = error "gunfold"
+  dataTypeOf _ = mkNoRepType "Data.Primitive.ByteArray.ByteArray"
+
+instance Typeable s => Data (MutableByteArray s) where
+  toConstr _ = error "toConstr"
+  gunfold _ _ = error "gunfold"
+  dataTypeOf _ = mkNoRepType "Data.Primitive.ByteArray.MutableByteArray"
+
index 849d288..32139c5 100644 (file)
@@ -1,4 +1,4 @@
-{-# LANGUAGE UnboxedTuples, MagicHash, CPP #-}
+{-# LANGUAGE UnboxedTuples, MagicHash, CPP, DeriveDataTypeable #-}
 
 -- |
 -- Module      : Data.Primitive.Types
@@ -35,8 +35,11 @@ import GHC.Int (
 
 import GHC.Prim
 
+import Data.Typeable ( Typeable )
+import Data.Data ( Data(..), mkNoRepType )
+
 -- | A machine address
-data Addr = Addr Addr#
+data Addr = Addr Addr# deriving ( Typeable )
 
 instance Eq Addr where
   Addr a# == Addr b# = eqAddr# a# b#
@@ -48,6 +51,12 @@ instance Ord Addr where
   Addr a# < Addr b# = ltAddr# a# b#
   Addr a# <= Addr b# = leAddr# a# b#
 
+instance Data Addr where
+  toConstr _ = error "toConstr"
+  gunfold _ _ = error "gunfold"
+  dataTypeOf _ = mkNoRepType "Data.Primitive.Types.Addr"
+
+
 -- | Class of types supporting primitive array operations
 class Prim a where