{-# LANGUAGE GADTs #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_HADDOCK hide #-}
module Data.Array.Accelerate.AST.Idx
where
import Language.Haskell.TH
data Idx env t where
ZeroIdx :: Idx (env, t) t
SuccIdx :: Idx env t -> Idx (env, s) t
data PairIdx p a where
PairIdxLeft :: PairIdx (a, b) a
PairIdxRight :: PairIdx (a, b) b
idxToInt :: Idx env t -> Int
idxToInt :: Idx env t -> Int
idxToInt Idx env t
ZeroIdx = Int
0
idxToInt (SuccIdx Idx env t
idx) = Int
1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Idx env t -> Int
forall env t. Idx env t -> Int
idxToInt Idx env t
idx
rnfIdx :: Idx env t -> ()
rnfIdx :: Idx env t -> ()
rnfIdx Idx env t
ZeroIdx = ()
rnfIdx (SuccIdx Idx env t
ix) = Idx env t -> ()
forall env t. Idx env t -> ()
rnfIdx Idx env t
ix
liftIdx :: Idx env t -> Q (TExp (Idx env t))
liftIdx :: Idx env t -> Q (TExp (Idx env t))
liftIdx Idx env t
ZeroIdx = [|| ZeroIdx ||]
liftIdx (SuccIdx Idx env t
ix) = [|| SuccIdx $$(liftIdx ix) ||]