{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE CPP #-} #include "fusion-phases.h" -- | Defines the `PRepr` family and `PA` class that converts between the user -- level element types and our generic representation. -- Apart from `unpackPA`, the `PA` wrapper functions defined here all have -- equivalent `PR` versions in "Data.Array.Parallel.PArray.PData", -- so see there for documentation. module Data.Array.Parallel.PArray.PRepr ( module Data.Array.Parallel.PArray.PRepr.Base , module Data.Array.Parallel.PArray.PRepr.Instances -- * Nested Arrays , module Data.Array.Parallel.PArray.PRepr.Nested , unpackPA -- * Tuple Arrays , module Data.Array.Parallel.PArray.PRepr.Tuple) where import Data.Array.Parallel.PArray.PRepr.Base import Data.Array.Parallel.PArray.PRepr.Instances import Data.Array.Parallel.PArray.PRepr.Nested import Data.Array.Parallel.PArray.PRepr.Tuple import Data.Array.Parallel.PArray.PData import Data.Array.Parallel.Pretty import qualified Data.Vector as V -- Pretty ------------------------------------------------------------------- instance (Show a, PA a) => Show (PArray a) where show (PArray _ pdata) = render $ brackets $ text "|" <> (hcat $ punctuate comma $ map (text . show) $ V.toList $ toVectorPA pdata) <> text "|" instance (PprVirtual a, PA a) => PprVirtual (PArray a) where pprv (PArray _ pdata) = brackets $ text "|" <> (hcat $ punctuate comma $ map pprv $ V.toList $ toVectorPA pdata) <> text "|" -- Unpack ---------------------------------------------------------------------- -- | Unpack an array to reveal its representation. {-# INLINE_PA unpackPA #-} unpackPA :: PA a => PArray a -> PData (PRepr a) unpackPA (PArray _ pdata) = toArrPRepr pdata