module GHC.Data.Bool
  ( OverridingBool(..)
  , overrideWith
  )
where

import GHC.Prelude

data OverridingBool
  = Auto
  | Never
  | Always
  deriving
    ( Int -> OverridingBool -> ShowS
[OverridingBool] -> ShowS
OverridingBool -> String
(Int -> OverridingBool -> ShowS)
-> (OverridingBool -> String)
-> ([OverridingBool] -> ShowS)
-> Show OverridingBool
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> OverridingBool -> ShowS
showsPrec :: Int -> OverridingBool -> ShowS
$cshow :: OverridingBool -> String
show :: OverridingBool -> String
$cshowList :: [OverridingBool] -> ShowS
showList :: [OverridingBool] -> ShowS
Show
    , ReadPrec [OverridingBool]
ReadPrec OverridingBool
Int -> ReadS OverridingBool
ReadS [OverridingBool]
(Int -> ReadS OverridingBool)
-> ReadS [OverridingBool]
-> ReadPrec OverridingBool
-> ReadPrec [OverridingBool]
-> Read OverridingBool
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS OverridingBool
readsPrec :: Int -> ReadS OverridingBool
$creadList :: ReadS [OverridingBool]
readList :: ReadS [OverridingBool]
$creadPrec :: ReadPrec OverridingBool
readPrec :: ReadPrec OverridingBool
$creadListPrec :: ReadPrec [OverridingBool]
readListPrec :: ReadPrec [OverridingBool]
Read    -- ^ @since 9.4.1
    , OverridingBool -> OverridingBool -> Bool
(OverridingBool -> OverridingBool -> Bool)
-> (OverridingBool -> OverridingBool -> Bool) -> Eq OverridingBool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OverridingBool -> OverridingBool -> Bool
== :: OverridingBool -> OverridingBool -> Bool
$c/= :: OverridingBool -> OverridingBool -> Bool
/= :: OverridingBool -> OverridingBool -> Bool
Eq      -- ^ @since 9.4.1
    , Eq OverridingBool
Eq OverridingBool
-> (OverridingBool -> OverridingBool -> Ordering)
-> (OverridingBool -> OverridingBool -> Bool)
-> (OverridingBool -> OverridingBool -> Bool)
-> (OverridingBool -> OverridingBool -> Bool)
-> (OverridingBool -> OverridingBool -> Bool)
-> (OverridingBool -> OverridingBool -> OverridingBool)
-> (OverridingBool -> OverridingBool -> OverridingBool)
-> Ord OverridingBool
OverridingBool -> OverridingBool -> Bool
OverridingBool -> OverridingBool -> Ordering
OverridingBool -> OverridingBool -> OverridingBool
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
$ccompare :: OverridingBool -> OverridingBool -> Ordering
compare :: OverridingBool -> OverridingBool -> Ordering
$c< :: OverridingBool -> OverridingBool -> Bool
< :: OverridingBool -> OverridingBool -> Bool
$c<= :: OverridingBool -> OverridingBool -> Bool
<= :: OverridingBool -> OverridingBool -> Bool
$c> :: OverridingBool -> OverridingBool -> Bool
> :: OverridingBool -> OverridingBool -> Bool
$c>= :: OverridingBool -> OverridingBool -> Bool
>= :: OverridingBool -> OverridingBool -> Bool
$cmax :: OverridingBool -> OverridingBool -> OverridingBool
max :: OverridingBool -> OverridingBool -> OverridingBool
$cmin :: OverridingBool -> OverridingBool -> OverridingBool
min :: OverridingBool -> OverridingBool -> OverridingBool
Ord     -- ^ @since 9.4.1
    , Int -> OverridingBool
OverridingBool -> Int
OverridingBool -> [OverridingBool]
OverridingBool -> OverridingBool
OverridingBool -> OverridingBool -> [OverridingBool]
OverridingBool
-> OverridingBool -> OverridingBool -> [OverridingBool]
(OverridingBool -> OverridingBool)
-> (OverridingBool -> OverridingBool)
-> (Int -> OverridingBool)
-> (OverridingBool -> Int)
-> (OverridingBool -> [OverridingBool])
-> (OverridingBool -> OverridingBool -> [OverridingBool])
-> (OverridingBool -> OverridingBool -> [OverridingBool])
-> (OverridingBool
    -> OverridingBool -> OverridingBool -> [OverridingBool])
-> Enum OverridingBool
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: OverridingBool -> OverridingBool
succ :: OverridingBool -> OverridingBool
$cpred :: OverridingBool -> OverridingBool
pred :: OverridingBool -> OverridingBool
$ctoEnum :: Int -> OverridingBool
toEnum :: Int -> OverridingBool
$cfromEnum :: OverridingBool -> Int
fromEnum :: OverridingBool -> Int
$cenumFrom :: OverridingBool -> [OverridingBool]
enumFrom :: OverridingBool -> [OverridingBool]
$cenumFromThen :: OverridingBool -> OverridingBool -> [OverridingBool]
enumFromThen :: OverridingBool -> OverridingBool -> [OverridingBool]
$cenumFromTo :: OverridingBool -> OverridingBool -> [OverridingBool]
enumFromTo :: OverridingBool -> OverridingBool -> [OverridingBool]
$cenumFromThenTo :: OverridingBool
-> OverridingBool -> OverridingBool -> [OverridingBool]
enumFromThenTo :: OverridingBool
-> OverridingBool -> OverridingBool -> [OverridingBool]
Enum    -- ^ @since 9.4.1
    , OverridingBool
OverridingBool -> OverridingBool -> Bounded OverridingBool
forall a. a -> a -> Bounded a
$cminBound :: OverridingBool
minBound :: OverridingBool
$cmaxBound :: OverridingBool
maxBound :: OverridingBool
Bounded -- ^ @since 9.4.1
    )

overrideWith :: Bool -> OverridingBool -> Bool
overrideWith :: Bool -> OverridingBool -> Bool
overrideWith Bool
b OverridingBool
Auto   = Bool
b
overrideWith Bool
_ OverridingBool
Never  = Bool
False
overrideWith Bool
_ OverridingBool
Always = Bool
True