{-# OPTIONS_HADDOCK hide #-}
module Byline.Internal.Types
( Color (..),
Status (..),
OnlyOne (..),
Modifier (..),
)
where
import qualified System.Console.ANSI as ANSI
data Color
= ColorCode ANSI.ColorIntensity ANSI.Color
| ColorRGB (Word8, Word8, Word8)
deriving (Int -> Color -> ShowS
[Color] -> ShowS
Color -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Color] -> ShowS
$cshowList :: [Color] -> ShowS
show :: Color -> String
$cshow :: Color -> String
showsPrec :: Int -> Color -> ShowS
$cshowsPrec :: Int -> Color -> ShowS
Show, Color -> Color -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Color -> Color -> Bool
$c/= :: Color -> Color -> Bool
== :: Color -> Color -> Bool
$c== :: Color -> Color -> Bool
Eq)
data Status = On | Off
deriving (Int -> Status -> ShowS
[Status] -> ShowS
Status -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Status] -> ShowS
$cshowList :: [Status] -> ShowS
show :: Status -> String
$cshow :: Status -> String
showsPrec :: Int -> Status -> ShowS
$cshowsPrec :: Int -> Status -> ShowS
Show, Status -> Status -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Status -> Status -> Bool
$c/= :: Status -> Status -> Bool
== :: Status -> Status -> Bool
$c== :: Status -> Status -> Bool
Eq)
instance Semigroup Status where
<> :: Status -> Status -> Status
(<>) Status
Off Status
Off = Status
Off
(<>) Status
Off Status
On = Status
On
(<>) Status
On Status
On = Status
On
(<>) Status
On Status
Off = Status
On
instance Monoid Status where
mempty :: Status
mempty = Status
Off
newtype OnlyOne a = OnlyOne {forall a. OnlyOne a -> Maybe a
unOne :: Maybe a}
deriving (Int -> OnlyOne a -> ShowS
forall a. Show a => Int -> OnlyOne a -> ShowS
forall a. Show a => [OnlyOne a] -> ShowS
forall a. Show a => OnlyOne a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [OnlyOne a] -> ShowS
$cshowList :: forall a. Show a => [OnlyOne a] -> ShowS
show :: OnlyOne a -> String
$cshow :: forall a. Show a => OnlyOne a -> String
showsPrec :: Int -> OnlyOne a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> OnlyOne a -> ShowS
Show, OnlyOne a -> OnlyOne a -> Bool
forall a. Eq a => OnlyOne a -> OnlyOne a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OnlyOne a -> OnlyOne a -> Bool
$c/= :: forall a. Eq a => OnlyOne a -> OnlyOne a -> Bool
== :: OnlyOne a -> OnlyOne a -> Bool
$c== :: forall a. Eq a => OnlyOne a -> OnlyOne a -> Bool
Eq)
instance Semigroup (OnlyOne a) where
<> :: OnlyOne a -> OnlyOne a -> OnlyOne a
(<>) OnlyOne a
_ b :: OnlyOne a
b@(OnlyOne (Just a
_)) = OnlyOne a
b
(<>) OnlyOne a
a OnlyOne a
_ = OnlyOne a
a
instance Monoid (OnlyOne a) where
mempty :: OnlyOne a
mempty = forall a. Maybe a -> OnlyOne a
OnlyOne forall a. Maybe a
Nothing
data Modifier = Modifier
{ Modifier -> OnlyOne Color
modColorFG :: OnlyOne Color,
Modifier -> OnlyOne Color
modColorBG :: OnlyOne Color,
Modifier -> Status
modBold :: Status,
Modifier -> Status
modUnderline :: Status,
Modifier -> Status
modSwapFgBg :: Status
}
deriving (Int -> Modifier -> ShowS
[Modifier] -> ShowS
Modifier -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Modifier] -> ShowS
$cshowList :: [Modifier] -> ShowS
show :: Modifier -> String
$cshow :: Modifier -> String
showsPrec :: Int -> Modifier -> ShowS
$cshowsPrec :: Int -> Modifier -> ShowS
Show, Modifier -> Modifier -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Modifier -> Modifier -> Bool
$c/= :: Modifier -> Modifier -> Bool
== :: Modifier -> Modifier -> Bool
$c== :: Modifier -> Modifier -> Bool
Eq)
instance Semigroup Modifier where
<> :: Modifier -> Modifier -> Modifier
(<>) (Modifier OnlyOne Color
a OnlyOne Color
b Status
c Status
d Status
e) (Modifier OnlyOne Color
a' OnlyOne Color
b' Status
c' Status
d' Status
e') =
OnlyOne Color
-> OnlyOne Color -> Status -> Status -> Status -> Modifier
Modifier (OnlyOne Color
a forall a. Semigroup a => a -> a -> a
<> OnlyOne Color
a') (OnlyOne Color
b forall a. Semigroup a => a -> a -> a
<> OnlyOne Color
b') (Status
c forall a. Semigroup a => a -> a -> a
<> Status
c') (Status
d forall a. Semigroup a => a -> a -> a
<> Status
d') (Status
e forall a. Semigroup a => a -> a -> a
<> Status
e')
instance Monoid Modifier where
mempty :: Modifier
mempty = OnlyOne Color
-> OnlyOne Color -> Status -> Status -> Status -> Modifier
Modifier forall a. Monoid a => a
mempty forall a. Monoid a => a
mempty forall a. Monoid a => a
mempty forall a. Monoid a => a
mempty forall a. Monoid a => a
mempty