module System.Console.Chalk (
reset, bold, dim, italic, underline, inverse, hidden,
strikethrough, black, red, green, yellow, blue,
magenta, cyan, white, gray, bgBlack, bgRed, bgGreen,
bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite) where
import Control.Arrow ((***))
import Data.Monoid
import Data.String
tag :: (Monoid m, IsString m) => m -> m
tag x = "\ESC[" <> x <> "m"
tags
:: (Monoid t1, Monoid t, IsString t1, IsString t) =>
(t, t1) -> (t, t1)
tags = tag *** tag
wrap :: (Monoid m, IsString m) => (m, m) -> m -> m
wrap (l, r) s = cl <> s <> cr
where (cl, cr) = tags (l, r)
reset, bold, dim, italic, underline, inverse, hidden,
strikethrough, black, red, green, yellow, blue,
magenta, cyan, white, gray, bgBlack, bgRed, bgGreen,
bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite ::
(Monoid m, IsString m) => m -> m
reset = wrap ("0", "0")
bold = wrap ("1", "22")
dim = wrap ("2", "22")
italic = wrap ("3", "23")
underline = wrap ("4", "24")
inverse = wrap ("7", "27")
hidden = wrap ("8", "28")
strikethrough = wrap ("9", "29")
black = wrap ("30", "39")
red = wrap ("31", "39")
green = wrap ("32", "39")
yellow = wrap ("33", "39")
blue = wrap ("34", "39")
magenta = wrap ("35", "39")
cyan = wrap ("36", "39")
white = wrap ("37", "39")
gray = wrap ("90", "39")
bgBlack = wrap ("40", "49")
bgRed = wrap ("41", "49")
bgGreen = wrap ("42", "49")
bgYellow = wrap ("43", "49")
bgBlue = wrap ("44", "49")
bgMagenta = wrap ("45", "49")
bgCyan = wrap ("46", "49")
bgWhite = wrap ("47", "49")