{-# OPTIONS_GHC -fvectorise #-}

-- |This module sets up the basic vectorisation map for vectorising the DPH Prelude.
module Data.Array.Parallel.Prelude.Base
        ( PArr
        -- , ()
        , Bool(..)
        , Ordering(..)
        , Word8, Int
        , Float, Double
        , Eq(..), Ord(..)
        , Show
        , Num(..)
        )
where
import Data.Array.Parallel.Prim ()       -- dependency required by the vectoriser

import Data.Array.Parallel.PArr
import Data.Array.Parallel.PArray.PData.Base
import Data.Array.Parallel.Lifted.Closure

import Data.Word (Word8)


-- internal types
{-# VECTORISE SCALAR type PArr = PArray #-}
{-# VECTORISE SCALAR type PArray = PArray #-}
{-# VECTORISE SCALAR type (->) = (:->) #-}

-- vectorised versions of types from the standard Prelude
{-# VECTORISE type ()       = () #-}
{-# VECTORISE type Bool     = Bool #-}
{-# VECTORISE type Ordering = Ordering #-}
{-# VECTORISE SCALAR type 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 #-}

-- vectorised versions of type classes from the standard Prelude
{-# VECTORISE class Eq #-}
{-# VECTORISE class Ord #-}
{-# VECTORISE class Show #-}  -- only to facilitate 'Num', no vectorised instances provided
{-# VECTORISE class Num #-}