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

    import GHC.Prelude.Basic

    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