Add a fake 'Scalar Integer' instance
authorManuel M T Chakravarty <chak@cse.unsw.edu.au>
Mon, 19 Dec 2011 05:03:48 +0000 (16:03 +1100)
committerManuel M T Chakravarty <chak@cse.unsw.edu.au>
Sun, 15 Jan 2012 13:06:32 +0000 (00:06 +1100)
'Integer' values still cannot appear in vectorised code, but we need to support the type to vectorise the rest of 'Num'

dph-lifted-vseg/Data/Array/Parallel/PArray/Scalar.hs
dph-lifted-vseg/Data/Array/Parallel/Prelude/Base.hs
dph-prim-par/Data/Array/Parallel/Unlifted/Distributed/Types/Prim.hs
dph-prim-seq/Data/Array/Parallel/Unlifted/Sequential/Vector.hs

index 6168ed5..cc88336 100644 (file)
@@ -30,6 +30,7 @@ module Data.Array.Parallel.PArray.Scalar
         -- * Enumerations
         , enumFromTo, enumFromTol)
 where
+import Data.Array.Parallel.PArray.PData.Void
 import Data.Array.Parallel.PArray.PData.Word8
 import Data.Array.Parallel.PArray.PData.Double
 import Data.Array.Parallel.PArray.PData
@@ -100,6 +101,19 @@ instance Scalar Ordering where
   fromScalarPDatas _
     = error "Data.Array.Parallel.PArray.Lifted.Scalar: no 'Arrays' instance for 'Ordering'."
 
+-- FIXME: this is a fake instance to enable us to vectorise 'Num'
+type instance PRepr  Integer = Void
+data instance PData  Integer = PInteger
+data instance PDatas Integer = PIntegers
+instance PA Integer
+instance U.Elt Integer
+instance Scalar Integer where
+  toScalarPData = fakeScalarInteger
+  fromScalarPData = fakeScalarInteger
+  toScalarPDatas = fakeScalarInteger
+  fromScalarPDatas = fakeScalarInteger
+fakeScalarInteger = error "D.A.P.PArray.Scalar: fake instance 'Scalar Integer'"
+
 -- See Note: Seqs in fromScalar
 instance Scalar Int where
   fromScalarPData  (PInt  xs)     = xs  `seq` xs
index b241be3..6ba9866 100644 (file)
@@ -31,3 +31,6 @@ import Data.Word (Word8)
 {-# VECTORISE SCALAR type Int #-}
 {-# VECTORISE SCALAR type Float #-}
 {-# VECTORISE SCALAR type Double #-}
+
+-- FIXME: currently a fake definition to allow 'Integer' in SCALAR class instances
+{-# VECTORISE SCALAR type Integer #-}
index 33106fc..ea3496c 100644 (file)
@@ -125,6 +125,12 @@ instance DT Ordering where
   sizeMD         = primSizeMD
 
 
+-- Integer -----------------------------------------------------------------------
+-- FIXME: fake instances
+instance DPrim Integer
+instance DT Integer
+
+
 -- Char -----------------------------------------------------------------------
 instance DPrim Char where
   mkDPrim           = DChar
index 63be26d..3b5b654 100644 (file)
@@ -583,3 +583,7 @@ instance G.Vector Vector Ordering where
   basicUnsafeIndexM (V_Ordering v) i = toOrdering `liftM` G.basicUnsafeIndexM v i
   basicUnsafeCopy (MV_Ordering mv) (V_Ordering v) = G.basicUnsafeCopy mv v
   elemseq _ = seq
+
+instance Unbox Integer
+instance MG.MVector MVector Integer
+instance G.Vector Vector Integer