packages feed

accelerate-cuda-0.17.0.0: Data/Array/Accelerate/CUDA/Analysis/Shape.hs

{-# LANGUAGE GADTs               #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators       #-}
-- |
-- Module      : Data.Array.Accelerate.CUDA.Analysis.Shape
-- Copyright   : [2012..2014] Manuel M T Chakravarty, Gabriele Keller, Trevor L. McDonell
-- License     : BSD3
--
-- Maintainer  : Trevor L. McDonell <tmcdonell@cse.unsw.edu.au>
-- Stability   : experimental
-- Portability : non-portable (GHC extensions)
--

module Data.Array.Accelerate.CUDA.Analysis.Shape (

  module Data.Array.Accelerate.Analysis.Shape,
  module Data.Array.Accelerate.CUDA.Analysis.Shape,
  (:~:)(..),

) where

import Data.Typeable

import Data.Array.Accelerate.Array.Sugar
import Data.Array.Accelerate.Analysis.Shape
import Data.Array.Accelerate.Analysis.Match

import Data.Array.Accelerate.CUDA.AST


-- | Reify dimensionality of the result type of an array computation
--
execAccDim :: AccDim ExecOpenAcc
execAccDim (ExecAcc _ _ pacc) = preAccDim execAccDim pacc


-- Match reified shape types
--
matchShapeType
    :: forall sh sh'. (Shape sh, Shape sh')
    => sh
    -> sh'
    -> Maybe (sh :~: sh')
matchShapeType _ _
  | Just Refl <- matchTupleType (eltType (undefined::sh)) (eltType (undefined::sh'))
  = gcast Refl

matchShapeType _ _
  = Nothing