{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RebindableSyntax #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Array.Accelerate.Classes.Ord (
Ord(..),
Ordering(..),
) where
import Data.Array.Accelerate.Array.Sugar
import Data.Array.Accelerate.Smart
import Data.Array.Accelerate.Type
import Data.Array.Accelerate.Classes.Eq
import Text.Printf
import Prelude ( ($), (.), Ordering(..), String, error, unlines )
import qualified Prelude as P
infix 4 <
infix 4 >
infix 4 <=
infix 4 >=
class Eq a => Ord a where
{-# MINIMAL (<=) | compare #-}
(<) :: Exp a -> Exp a -> Exp Bool
(>) :: Exp a -> Exp a -> Exp Bool
(<=) :: Exp a -> Exp a -> Exp Bool
(>=) :: Exp a -> Exp a -> Exp Bool
min :: Exp a -> Exp a -> Exp a
max :: Exp a -> Exp a -> Exp a
compare :: Exp a -> Exp a -> Exp Ordering
x < y = if compare x y == constant LT then constant True else constant False
x <= y = if compare x y == constant GT then constant False else constant True
x > y = if compare x y == constant GT then constant True else constant False
x >= y = if compare x y == constant LT then constant False else constant True
min x y = if x <= y then x else y
max x y = if x <= y then y else x
compare x y =
if x == y then constant EQ else
if x <= y then constant LT
else constant GT
ifThenElse :: Elt a => Exp Bool -> Exp a -> Exp a -> Exp a
ifThenElse = Exp $$$ Cond
instance Ord () where
(<) _ _ = constant False
(>) _ _ = constant False
(>=) _ _ = constant True
(<=) _ _ = constant True
min _ _ = constant ()
max _ _ = constant ()
compare _ _ = constant EQ
instance Ord Int where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Int8 where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Int16 where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Int32 where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Int64 where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Word where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Word8 where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Word16 where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Word32 where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Word64 where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CInt where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CUInt where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CLong where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CULong where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CLLong where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CULLong where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CShort where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CUShort where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Bool where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Char where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CChar where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CUChar where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CSChar where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Half where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Float where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord Double where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CFloat where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance Ord CDouble where
(<) = mkLt
(>) = mkGt
(<=) = mkLtEq
(>=) = mkGtEq
min = mkMin
max = mkMax
instance (Ord a, Ord b) => Ord (a, b) where
x <= y = let (a1,b1) = untup2 x
(a2,b2) = untup2 y
in a1 < a2 || (a1 == a2 && b1 <= b2)
x >= y = let (a1,b1) = untup2 x
(a2,b2) = untup2 y
in a1 > a2 || (a1 == a2 && b1 >= b2)
x < y = let (a1,b1) = untup2 x
(a2,b2) = untup2 y
in a1 < a2 || (a1 == a2 && b1 < b2)
x > y = let (a1,b1) = untup2 x
(a2,b2) = untup2 y
in a1 > a2 || (a1 == a2 && b1 > b2)
instance (Ord a, Ord b, Ord c) => Ord (a, b, c) where
x <= y = let (a1,b1,c1) = untup3 x; x' = tup2 (b1,c1)
(a2,b2,c2) = untup3 y; y' = tup2 (b2,c2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1) = untup3 x; x' = tup2 (b1,c1)
(a2,b2,c2) = untup3 y; y' = tup2 (b2,c2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1) = untup3 x; x' = tup2 (b1,c1)
(a2,b2,c2) = untup3 y; y' = tup2 (b2,c2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1) = untup3 x; x' = tup2 (b1,c1)
(a2,b2,c2) = untup3 y; y' = tup2 (b2,c2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d) => Ord (a, b, c, d) where
x <= y = let (a1,b1,c1,d1) = untup4 x; x' = tup3 (b1,c1,d1)
(a2,b2,c2,d2) = untup4 y; y' = tup3 (b2,c2,d2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1) = untup4 x; x' = tup3 (b1,c1,d1)
(a2,b2,c2,d2) = untup4 y; y' = tup3 (b2,c2,d2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1) = untup4 x; x' = tup3 (b1,c1,d1)
(a2,b2,c2,d2) = untup4 y; y' = tup3 (b2,c2,d2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1) = untup4 x; x' = tup3 (b1,c1,d1)
(a2,b2,c2,d2) = untup4 y; y' = tup3 (b2,c2,d2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e) => Ord (a, b, c, d, e) where
x <= y = let (a1,b1,c1,d1,e1) = untup5 x; x' = tup4 (b1,c1,d1,e1)
(a2,b2,c2,d2,e2) = untup5 y; y' = tup4 (b2,c2,d2,e2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1) = untup5 x; x' = tup4 (b1,c1,d1,e1)
(a2,b2,c2,d2,e2) = untup5 y; y' = tup4 (b2,c2,d2,e2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1) = untup5 x; x' = tup4 (b1,c1,d1,e1)
(a2,b2,c2,d2,e2) = untup5 y; y' = tup4 (b2,c2,d2,e2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1) = untup5 x; x' = tup4 (b1,c1,d1,e1)
(a2,b2,c2,d2,e2) = untup5 y; y' = tup4 (b2,c2,d2,e2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f) => Ord (a, b, c, d, e, f) where
x <= y = let (a1,b1,c1,d1,e1,f1) = untup6 x; x' = tup5 (b1,c1,d1,e1,f1)
(a2,b2,c2,d2,e2,f2) = untup6 y; y' = tup5 (b2,c2,d2,e2,f2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1) = untup6 x; x' = tup5 (b1,c1,d1,e1,f1)
(a2,b2,c2,d2,e2,f2) = untup6 y; y' = tup5 (b2,c2,d2,e2,f2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1) = untup6 x; x' = tup5 (b1,c1,d1,e1,f1)
(a2,b2,c2,d2,e2,f2) = untup6 y; y' = tup5 (b2,c2,d2,e2,f2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1) = untup6 x; x' = tup5 (b1,c1,d1,e1,f1)
(a2,b2,c2,d2,e2,f2) = untup6 y; y' = tup5 (b2,c2,d2,e2,f2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g) => Ord (a, b, c, d, e, f, g) where
x <= y = let (a1,b1,c1,d1,e1,f1,g1) = untup7 x; x' = tup6 (b1,c1,d1,e1,f1,g1)
(a2,b2,c2,d2,e2,f2,g2) = untup7 y; y' = tup6 (b2,c2,d2,e2,f2,g2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1,g1) = untup7 x; x' = tup6 (b1,c1,d1,e1,f1,g1)
(a2,b2,c2,d2,e2,f2,g2) = untup7 y; y' = tup6 (b2,c2,d2,e2,f2,g2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1,g1) = untup7 x; x' = tup6 (b1,c1,d1,e1,f1,g1)
(a2,b2,c2,d2,e2,f2,g2) = untup7 y; y' = tup6 (b2,c2,d2,e2,f2,g2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1,g1) = untup7 x; x' = tup6 (b1,c1,d1,e1,f1,g1)
(a2,b2,c2,d2,e2,f2,g2) = untup7 y; y' = tup6 (b2,c2,d2,e2,f2,g2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h) => Ord (a, b, c, d, e, f, g, h) where
x <= y = let (a1,b1,c1,d1,e1,f1,g1,h1) = untup8 x; x' = tup7 (b1,c1,d1,e1,f1,g1,h1)
(a2,b2,c2,d2,e2,f2,g2,h2) = untup8 y; y' = tup7 (b2,c2,d2,e2,f2,g2,h2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1,g1,h1) = untup8 x; x' = tup7 (b1,c1,d1,e1,f1,g1,h1)
(a2,b2,c2,d2,e2,f2,g2,h2) = untup8 y; y' = tup7 (b2,c2,d2,e2,f2,g2,h2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1,g1,h1) = untup8 x; x' = tup7 (b1,c1,d1,e1,f1,g1,h1)
(a2,b2,c2,d2,e2,f2,g2,h2) = untup8 y; y' = tup7 (b2,c2,d2,e2,f2,g2,h2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1,g1,h1) = untup8 x; x' = tup7 (b1,c1,d1,e1,f1,g1,h1)
(a2,b2,c2,d2,e2,f2,g2,h2) = untup8 y; y' = tup7 (b2,c2,d2,e2,f2,g2,h2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i) => Ord (a, b, c, d, e, f, g, h, i) where
x <= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1) = untup9 x; x' = tup8 (b1,c1,d1,e1,f1,g1,h1,i1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2) = untup9 y; y' = tup8 (b2,c2,d2,e2,f2,g2,h2,i2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1) = untup9 x; x' = tup8 (b1,c1,d1,e1,f1,g1,h1,i1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2) = untup9 y; y' = tup8 (b2,c2,d2,e2,f2,g2,h2,i2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1) = untup9 x; x' = tup8 (b1,c1,d1,e1,f1,g1,h1,i1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2) = untup9 y; y' = tup8 (b2,c2,d2,e2,f2,g2,h2,i2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1) = untup9 x; x' = tup8 (b1,c1,d1,e1,f1,g1,h1,i1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2) = untup9 y; y' = tup8 (b2,c2,d2,e2,f2,g2,h2,i2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j) => Ord (a, b, c, d, e, f, g, h, i, j) where
x <= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1) = untup10 x; x' = tup9 (b1,c1,d1,e1,f1,g1,h1,i1,j1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2) = untup10 y; y' = tup9 (b2,c2,d2,e2,f2,g2,h2,i2,j2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1) = untup10 x; x' = tup9 (b1,c1,d1,e1,f1,g1,h1,i1,j1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2) = untup10 y; y' = tup9 (b2,c2,d2,e2,f2,g2,h2,i2,j2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1) = untup10 x; x' = tup9 (b1,c1,d1,e1,f1,g1,h1,i1,j1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2) = untup10 y; y' = tup9 (b2,c2,d2,e2,f2,g2,h2,i2,j2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1) = untup10 x; x' = tup9 (b1,c1,d1,e1,f1,g1,h1,i1,j1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2) = untup10 y; y' = tup9 (b2,c2,d2,e2,f2,g2,h2,i2,j2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k) => Ord (a, b, c, d, e, f, g, h, i, j, k) where
x <= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1) = untup11 x; x' = tup10 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2) = untup11 y; y' = tup10 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1) = untup11 x; x' = tup10 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2) = untup11 y; y' = tup10 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1) = untup11 x; x' = tup10 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2) = untup11 y; y' = tup10 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1) = untup11 x; x' = tup10 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2) = untup11 y; y' = tup10 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l) => Ord (a, b, c, d, e, f, g, h, i, j, k, l) where
x <= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1) = untup12 x; x' = tup11 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2) = untup12 y; y' = tup11 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1) = untup12 x; x' = tup11 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2) = untup12 y; y' = tup11 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1) = untup12 x; x' = tup11 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2) = untup12 y; y' = tup11 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1) = untup12 x; x' = tup11 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2) = untup12 y; y' = tup11 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l, Ord m) => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m) where
x <= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1) = untup13 x; x' = tup12 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2) = untup13 y; y' = tup12 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1) = untup13 x; x' = tup12 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2) = untup13 y; y' = tup12 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1) = untup13 x; x' = tup12 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2) = untup13 y; y' = tup12 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1) = untup13 x; x' = tup12 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2) = untup13 y; y' = tup12 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l, Ord m, Ord n) => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n) where
x <= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1) = untup14 x; x' = tup13 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2) = untup14 y; y' = tup13 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1) = untup14 x; x' = tup13 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2) = untup14 y; y' = tup13 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1) = untup14 x; x' = tup13 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2) = untup14 y; y' = tup13 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1) = untup14 x; x' = tup13 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2) = untup14 y; y' = tup13 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2)
in a1 > a2 || (a1 == a2 && x' > y')
instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g, Ord h, Ord i, Ord j, Ord k, Ord l, Ord m, Ord n, Ord o) => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) where
x <= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1) = untup15 x; x' = tup14 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,o2) = untup15 y; y' = tup14 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,o2)
in a1 < a2 || (a1 == a2 && x' <= y')
x >= y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1) = untup15 x; x' = tup14 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,o2) = untup15 y; y' = tup14 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,o2)
in a1 > a2 || (a1 == a2 && x' >= y')
x < y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1) = untup15 x; x' = tup14 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,o2) = untup15 y; y' = tup14 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,o2)
in a1 < a2 || (a1 == a2 && x' < y')
x > y = let (a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1) = untup15 x; x' = tup14 (b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1)
(a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,o2) = untup15 y; y' = tup14 (b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,o2)
in a1 > a2 || (a1 == a2 && x' > y')
type instance EltRepr Ordering = Int8
instance Elt Ordering where
eltType _ = TypeRscalar scalarType
fromElt = P.fromIntegral . P.fromEnum
toElt = P.toEnum . P.fromIntegral
instance Eq Ordering where
x == y = mkBitcast x == (mkBitcast y :: Exp Int8)
x /= y = mkBitcast x /= (mkBitcast y :: Exp Int8)
instance Ord Ordering where
x < y = mkBitcast x < (mkBitcast y :: Exp Int8)
x > y = mkBitcast x > (mkBitcast y :: Exp Int8)
x <= y = mkBitcast x <= (mkBitcast y :: Exp Int8)
x >= y = mkBitcast x >= (mkBitcast y :: Exp Int8)
min x y = mkBitcast $ min (mkBitcast x) (mkBitcast y :: Exp Int8)
max x y = mkBitcast $ max (mkBitcast x) (mkBitcast y :: Exp Int8)
instance Ord a => P.Ord (Exp a) where
(<) = preludeError "Ord.(<)" "(<)"
(<=) = preludeError "Ord.(<=)" "(<=)"
(>) = preludeError "Ord.(>)" "(>)"
(>=) = preludeError "Ord.(>=)" "(>=)"
min = min
max = max
preludeError :: String -> String -> a
preludeError x y
= error
$ unlines [ printf "Prelude.%s applied to EDSL types: use Data.Array.Accelerate.%s instead" x y
, ""
, "These Prelude.Ord instances are present only to fulfil superclass"
, "constraints for subsequent classes in the standard Haskell numeric"
, "hierarchy."
]