{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Array.Accelerate.Linear.V0 (
V0(..), pattern V0_,
) where
import Data.Array.Accelerate as A
import Data.Array.Accelerate.Data.Functor as A
import Data.Array.Accelerate.Smart
import Data.Array.Accelerate.Linear.Metric
import Data.Array.Accelerate.Linear.Vector
import Linear.V0 ( V0(..) )
import Control.Lens
import Control.Applicative
import Prelude as P
pattern V0_ :: Elt a => Exp (V0 a)
pattern V0_ = Pattern ()
{-# COMPLETE V0_ #-}
instance Metric V0
instance Additive V0
instance Elt a => Elt (V0 a)
instance Lift Exp (V0 a) where
type Plain (V0 a) = ()
lift _ = Exp (SmartExp Nil)
instance Unlift Exp (V0 a) where
unlift _ = V0
instance (Elt a, Elt b) => Each (Exp (V0 a)) (Exp (V0 b)) (Exp a) (Exp b) where
each _ _ = pure (constant V0)
instance A.Num a => P.Num (Exp (V0 a)) where
_ + _ = constant V0
_ - _ = constant V0
_ * _ = constant V0
abs _ = constant V0
signum _ = constant V0
fromInteger _ = constant V0
instance Elt a => A.Eq (V0 a) where
_ == _ = constant True
_ /= _ = constant False
instance Elt a => A.Ord (V0 a) where
_ < _ = constant False
_ > _ = constant False
_ <= _ = constant True
_ >= _ = constant True
min _ _ = constant V0
max _ _ = constant V0
instance Elt a => P.Bounded (Exp (V0 a)) where
minBound = constant V0
maxBound = constant V0
instance A.Functor V0 where
fmap _ _ = constant V0
_ <$ _ = constant V0