{-# 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 (
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 $bW2_ :: Exp a -> Exp b -> Exp (BigWord a b)
$mW2_ :: forall r a b.
(Elt a, Elt b) =>
Exp (BigWord a b) -> (Exp a -> Exp b -> r) -> (Void# -> r) -> r
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 :: BigWord a b -> Exp (Plain (BigWord a b))
lift (W2 a
a b
b) = Exp (Plain a) -> Exp (Plain b) -> Exp (BigWord (Plain a) (Plain b))
forall a b. (Elt a, Elt b) => Exp a -> Exp b -> Exp (BigWord a b)
W2_ (a -> Exp (Plain a)
forall (c :: * -> *) e. Lift c e => e -> c (Plain e)
lift a
a) (b -> Exp (Plain b)
forall (c :: * -> *) e. Lift c e => e -> c (Plain e)
lift b
b)
instance (Elt a, Elt b) => Unlift Exp (BigWord (Exp a) (Exp b)) where
unlift :: Exp (Plain (BigWord (Exp a) (Exp b))) -> BigWord (Exp a) (Exp b)
unlift (W2_ a b) = Exp a -> Exp b -> BigWord (Exp a) (Exp b)
forall hi lo. hi -> lo -> BigWord hi lo
W2 Exp a
a Exp b
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 $bI2_ :: Exp a -> Exp b -> Exp (BigInt a b)
$mI2_ :: forall r a b.
(Elt a, Elt b) =>
Exp (BigInt a b) -> (Exp a -> Exp b -> r) -> (Void# -> r) -> r
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 :: BigInt a b -> Exp (Plain (BigInt a b))
lift (I2 a
a b
b) = Exp (Plain a) -> Exp (Plain b) -> Exp (BigInt (Plain a) (Plain b))
forall a b. (Elt a, Elt b) => Exp a -> Exp b -> Exp (BigInt a b)
I2_ (a -> Exp (Plain a)
forall (c :: * -> *) e. Lift c e => e -> c (Plain e)
lift a
a) (b -> Exp (Plain b)
forall (c :: * -> *) e. Lift c e => e -> c (Plain e)
lift b
b)
instance (Elt a, Elt b) => Unlift Exp (BigInt (Exp a) (Exp b)) where
unlift :: Exp (Plain (BigInt (Exp a) (Exp b))) -> BigInt (Exp a) (Exp b)
unlift (I2_ a b) = Exp a -> Exp b -> BigInt (Exp a) (Exp b)
forall hi lo. hi -> lo -> BigInt hi lo
I2 Exp a
a Exp b
b