module Data.Array.Parallel.Trace
( Trace (..)
, Op (..)
, traceOp)
where
import Data.Typeable
traceOp :: Op -> a -> a
traceOp _op x = x
data Trace
= Trace Op
deriving Show
data Op
= OpSingleton { traceElemType :: TypeRep }
| OpSingletonL { traceElemType :: TypeRep
, traceContext :: Int }
| OpReplicate { traceElemType :: TypeRep
, traceCount :: Int }
| OpReplicateL { traceElemType :: TypeRep
, traceContext :: Int }
| OpReplicateS { traceElemType :: TypeRep
, traceCount :: Int }
| OpAppend { traceElemType :: TypeRep
, traceSrc1Length :: Int
, traceSrc2Length :: Int
, traceDstLength :: Int }
| OpAppendL { traceElemType :: TypeRep
, traceContext :: Int }
| OpConcat { traceElemType :: TypeRep
, traceSrcLength :: Int
, traceDstLength :: Int }
| OpConcatL { traceElemType :: TypeRep
, traceContext :: Int }
| OpUnconcat { traceElemType :: TypeRep
, traceCount :: Int }
| OpLength
| OpLengthL { traceContext :: Int }
| OpIndex
| OpIndexL { traceContext :: Int }
| OpExtract { traceDstLength :: Int }
| OpExtractS { traceDstLength :: Int }
| OpSlice { traceDstLength :: Int }
| OpSliceL { traceContext :: Int }
| OpPack { traceDstLength :: Int }
| OpPackL { traceContext :: Int }
| OpPackByTag { traceDstLength :: Int }
| OpCombine2 { traceDstLength :: Int }
| OpZip { traceLength :: Int }
| OpZipL { traceLength :: Int }
| OpUnzip { traceLength :: Int }
| OpUnzipL { traceLength :: Int }
deriving Show