{-# LANGUAGE DeriveGeneric, FlexibleContexts, UndecidableInstances #-}
module Data.Lexicographic.Generic
(module Data.Lexicographic.Generic, GBounded, GEnum, Generic, Rep)
where
import Data.Lexicographic.Generic.Internal
import GHC.Generics
newtype GenericLexicographicOrder a = GenericLexicographicOrder a
deriving (GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
(GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Bool)
-> (GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Bool)
-> Eq (GenericLexicographicOrder a)
forall a.
Eq a =>
GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
$c/= :: forall a.
Eq a =>
GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
== :: GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
$c== :: forall a.
Eq a =>
GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
Eq, Eq (GenericLexicographicOrder a)
Eq (GenericLexicographicOrder a)
-> (GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Ordering)
-> (GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Bool)
-> (GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Bool)
-> (GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Bool)
-> (GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Bool)
-> (GenericLexicographicOrder a
-> GenericLexicographicOrder a -> GenericLexicographicOrder a)
-> (GenericLexicographicOrder a
-> GenericLexicographicOrder a -> GenericLexicographicOrder a)
-> Ord (GenericLexicographicOrder a)
GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Ordering
GenericLexicographicOrder a
-> GenericLexicographicOrder a -> GenericLexicographicOrder a
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (GenericLexicographicOrder a)
forall a.
Ord a =>
GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
forall a.
Ord a =>
GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Ordering
forall a.
Ord a =>
GenericLexicographicOrder a
-> GenericLexicographicOrder a -> GenericLexicographicOrder a
min :: GenericLexicographicOrder a
-> GenericLexicographicOrder a -> GenericLexicographicOrder a
$cmin :: forall a.
Ord a =>
GenericLexicographicOrder a
-> GenericLexicographicOrder a -> GenericLexicographicOrder a
max :: GenericLexicographicOrder a
-> GenericLexicographicOrder a -> GenericLexicographicOrder a
$cmax :: forall a.
Ord a =>
GenericLexicographicOrder a
-> GenericLexicographicOrder a -> GenericLexicographicOrder a
>= :: GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
$c>= :: forall a.
Ord a =>
GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
> :: GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
$c> :: forall a.
Ord a =>
GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
<= :: GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
$c<= :: forall a.
Ord a =>
GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
< :: GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
$c< :: forall a.
Ord a =>
GenericLexicographicOrder a -> GenericLexicographicOrder a -> Bool
compare :: GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Ordering
$ccompare :: forall a.
Ord a =>
GenericLexicographicOrder a
-> GenericLexicographicOrder a -> Ordering
$cp1Ord :: forall a. Ord a => Eq (GenericLexicographicOrder a)
Ord, ReadPrec [GenericLexicographicOrder a]
ReadPrec (GenericLexicographicOrder a)
Int -> ReadS (GenericLexicographicOrder a)
ReadS [GenericLexicographicOrder a]
(Int -> ReadS (GenericLexicographicOrder a))
-> ReadS [GenericLexicographicOrder a]
-> ReadPrec (GenericLexicographicOrder a)
-> ReadPrec [GenericLexicographicOrder a]
-> Read (GenericLexicographicOrder a)
forall a. Read a => ReadPrec [GenericLexicographicOrder a]
forall a. Read a => ReadPrec (GenericLexicographicOrder a)
forall a. Read a => Int -> ReadS (GenericLexicographicOrder a)
forall a. Read a => ReadS [GenericLexicographicOrder a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GenericLexicographicOrder a]
$creadListPrec :: forall a. Read a => ReadPrec [GenericLexicographicOrder a]
readPrec :: ReadPrec (GenericLexicographicOrder a)
$creadPrec :: forall a. Read a => ReadPrec (GenericLexicographicOrder a)
readList :: ReadS [GenericLexicographicOrder a]
$creadList :: forall a. Read a => ReadS [GenericLexicographicOrder a]
readsPrec :: Int -> ReadS (GenericLexicographicOrder a)
$creadsPrec :: forall a. Read a => Int -> ReadS (GenericLexicographicOrder a)
Read, Int -> GenericLexicographicOrder a -> ShowS
[GenericLexicographicOrder a] -> ShowS
GenericLexicographicOrder a -> String
(Int -> GenericLexicographicOrder a -> ShowS)
-> (GenericLexicographicOrder a -> String)
-> ([GenericLexicographicOrder a] -> ShowS)
-> Show (GenericLexicographicOrder a)
forall a. Show a => Int -> GenericLexicographicOrder a -> ShowS
forall a. Show a => [GenericLexicographicOrder a] -> ShowS
forall a. Show a => GenericLexicographicOrder a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GenericLexicographicOrder a] -> ShowS
$cshowList :: forall a. Show a => [GenericLexicographicOrder a] -> ShowS
show :: GenericLexicographicOrder a -> String
$cshow :: forall a. Show a => GenericLexicographicOrder a -> String
showsPrec :: Int -> GenericLexicographicOrder a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> GenericLexicographicOrder a -> ShowS
Show, (forall x.
GenericLexicographicOrder a -> Rep (GenericLexicographicOrder a) x)
-> (forall x.
Rep (GenericLexicographicOrder a) x -> GenericLexicographicOrder a)
-> Generic (GenericLexicographicOrder a)
forall x.
Rep (GenericLexicographicOrder a) x -> GenericLexicographicOrder a
forall x.
GenericLexicographicOrder a -> Rep (GenericLexicographicOrder a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x.
Rep (GenericLexicographicOrder a) x -> GenericLexicographicOrder a
forall a x.
GenericLexicographicOrder a -> Rep (GenericLexicographicOrder a) x
$cto :: forall a x.
Rep (GenericLexicographicOrder a) x -> GenericLexicographicOrder a
$cfrom :: forall a x.
GenericLexicographicOrder a -> Rep (GenericLexicographicOrder a) x
Generic)
instance (Generic a, GBounded (Rep a)) => Bounded (GenericLexicographicOrder a) where
minBound :: GenericLexicographicOrder a
minBound = a -> GenericLexicographicOrder a
forall a. a -> GenericLexicographicOrder a
GenericLexicographicOrder (Rep a Any -> a
forall a x. Generic a => Rep a x -> a
to Rep a Any
forall (ra :: * -> *) x. GBounded ra => ra x
gminBound)
maxBound :: GenericLexicographicOrder a
maxBound = a -> GenericLexicographicOrder a
forall a. a -> GenericLexicographicOrder a
GenericLexicographicOrder (Rep a Any -> a
forall a x. Generic a => Rep a x -> a
to Rep a Any
forall (ra :: * -> *) x. GBounded ra => ra x
gmaxBound)
instance (Generic a, GEnum (Rep a)) => Enum (GenericLexicographicOrder a) where
fromEnum :: GenericLexicographicOrder a -> Int
fromEnum (GenericLexicographicOrder a
x) = Rep a Any -> Int
forall (ra :: * -> *) x. GEnum ra => ra x -> Int
gfromEnum (a -> Rep a Any
forall a x. Generic a => a -> Rep a x
from a
x)
toEnum :: Int -> GenericLexicographicOrder a
toEnum Int
n = a -> GenericLexicographicOrder a
forall a. a -> GenericLexicographicOrder a
GenericLexicographicOrder (Rep a Any -> a
forall a x. Generic a => Rep a x -> a
to (Int -> Rep a Any
forall (ra :: * -> *) x. GEnum ra => Int -> ra x
gtoEnum Int
n))
genericMinBound :: (Generic a, GBounded (Rep a)) => a
genericMinBound :: a
genericMinBound = case GenericLexicographicOrder a
forall a. Bounded a => a
minBound of GenericLexicographicOrder a
x -> a
x
genericMaxBound :: (Generic a, GBounded (Rep a)) => a
genericMaxBound :: a
genericMaxBound = case GenericLexicographicOrder a
forall a. Bounded a => a
maxBound of GenericLexicographicOrder a
x -> a
x
genericFromEnum :: (Generic a, GEnum (Rep a)) => a -> Int
a
x = GenericLexicographicOrder a -> Int
forall a. Enum a => a -> Int
fromEnum (GenericLexicographicOrder a -> Int)
-> GenericLexicographicOrder a -> Int
forall a b. (a -> b) -> a -> b
$ a -> GenericLexicographicOrder a
forall a. a -> GenericLexicographicOrder a
GenericLexicographicOrder a
x
genericToEnum :: (Generic a, GEnum (Rep a)) => Int -> a
genericToEnum :: Int -> a
genericToEnum Int
n = case Int -> GenericLexicographicOrder a
forall a. Enum a => Int -> a
toEnum Int
n of GenericLexicographicOrder a
x -> a
x