accelerate-bignum-0.3.0.0: src/Data/Array/Accelerate/Internal/Orphans/Elt.hs
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- |
-- Module : Data.Array.Accelerate.Internal.Orphans.Elt
-- Copyright : [2016..2020] Trevor L. McDonell
-- License : BSD3
--
-- Maintainer : Trevor L. McDonell <trevor.mcdonell@gmail.com>
-- Stability : experimental
-- Portability : non-portable (GHC extensions)
--
-- Orphan Elt instances for BigWord and BigInt
--
module Data.Array.Accelerate.Internal.Orphans.Elt (
pattern W2_,
pattern I2_,
) where
import Data.Array.Accelerate.Internal.BigInt
import Data.Array.Accelerate.Internal.BigWord
import Data.Array.Accelerate hiding ( pattern I2 )
instance (Elt a, Elt b) => Elt (BigWord a b)
pattern W2_ :: (Elt a, Elt b) => Exp a -> Exp b -> Exp (BigWord a b)
pattern W2_ a b = Pattern (a, b)
{-# COMPLETE W2_ #-}
instance (Lift Exp a, Lift Exp b, Elt (Plain a), Elt (Plain b))
=> Lift Exp (BigWord a b) where
type Plain (BigWord a b) = BigWord (Plain a) (Plain b)
lift (W2 a b) = W2_ (lift a) (lift b)
instance (Elt a, Elt b) => Unlift Exp (BigWord (Exp a) (Exp b)) where
unlift (W2_ a b) = W2 a b
instance (Elt a, Elt b) => Elt (BigInt a b)
pattern I2_ :: (Elt a, Elt b) => Exp a -> Exp b -> Exp (BigInt a b)
pattern I2_ a b = Pattern (a, b)
{-# COMPLETE I2_ #-}
instance (Lift Exp a, Lift Exp b, Elt (Plain a), Elt (Plain b))
=> Lift Exp (BigInt a b) where
type Plain (BigInt a b) = BigInt (Plain a) (Plain b)
lift (I2 a b) = I2_ (lift a) (lift b)
instance (Elt a, Elt b) => Unlift Exp (BigInt (Exp a) (Exp b)) where
unlift (I2_ a b) = I2 a b