0 | module Control.ANSI.SGR
8 | = Black | Red | Green | Yellow | Blue | Magenta | Cyan | White
9 | | BrightBlack | BrightRed | BrightGreen | BrightYellow | BrightBlue | BrightMagenta | BrightCyan | BrightWhite
11 | Cast Color String where
20 | cast BrightBlack = "8"
21 | cast BrightRed = "9"
22 | cast BrightGreen = "10"
23 | cast BrightYellow = "11"
24 | cast BrightBlue = "12"
25 | cast BrightMagenta = "13"
26 | cast BrightCyan = "14"
27 | cast BrightWhite = "15"
31 | = Bold | Faint | NotBoldOrFaint | Italic
32 | | SingleUnderline | DoubleUnderline | NoUnderline
33 | | Striked | NotStriked
35 | Cast Style String where
38 | cast NotBoldOrFaint = "22"
40 | cast SingleUnderline = "4"
41 | cast DoubleUnderline = "21"
42 | cast NoUnderline = "24"
44 | cast NotStriked = "29"
47 | data Blink = Slow | Rapid | NoBlink
49 | Cast Blink String where
57 | | SetForeground Color
58 | | SetBackground Color
64 | escapeSGR : List SGR -> String
65 | escapeSGR xs = "\x1B[" ++ concat (intersperse ";" (toCode <$> xs)) ++ "m"
67 | toCode : SGR -> String
69 | toCode (SetForeground c) = "38;5;" ++ cast c
70 | toCode (SetBackground c) = "48;5;" ++ cast c
71 | toCode (SetStyle s) = cast s
72 | toCode (SetBlink b) = cast b