colorful-monoids-0.2.1.3: Styled console text output using ANSI escape sequences.

CopyrightDaniel Mendler (c) 2017
LicenseMIT (see the file LICENSE)
Maintainermail@daniel-mendler.de
Stabilityexperimental
Portabilityportable
Safe HaskellSafe
LanguageHaskell2010

Data.Monoid.Colorful

Contents

Description

This library provides styled text output using ANSI escape sequences. The colored text is modeled as nested Colored values, which form a Monoid. As a result the colored code has a relatively concise form.

For rendering, the Colored Monoid is flattended and then printed out. The library keeps track of a stack of the active styles internally, such that correct and minimal escape sequences are generated.

This library is used by wl-pprint-console, which is a pretty printer with support for annotations.

Warning: Windows support is currently not implemented, but is planned (by using ansi-terminal or the ffi).

Example:

basicExample :: IO ()
basicExample = do
  term <- getTerm
  printColoredS term $ Style Underline (Style Bold "Basic Example\n")
    <> Style Bold "Bold"
    <> Style Italic (Bg Red "Italic Red")
    <> Style Underline "Underline"
  putChar '\n'

For many more examples, see the example.hs file.

Synopsis

The Monoid

data Colored a Source #

Colored Monoid

Constructors

Nil 
Value a 
Style !Style (Colored a) 
Unstyle !Style (Colored a) 
Fg !Color (Colored a) 
Bg !Color (Colored a) 
Pair (Colored a) (Colored a) 
Instances
Monad Colored Source #

Free monad!

Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

(>>=) :: Colored a -> (a -> Colored b) -> Colored b #

(>>) :: Colored a -> Colored b -> Colored b #

return :: a -> Colored a #

fail :: String -> Colored a #

Functor Colored Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

fmap :: (a -> b) -> Colored a -> Colored b #

(<$) :: a -> Colored b -> Colored a #

Applicative Colored Source #

Free monad!

Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

pure :: a -> Colored a #

(<*>) :: Colored (a -> b) -> Colored a -> Colored b #

liftA2 :: (a -> b -> c) -> Colored a -> Colored b -> Colored c #

(*>) :: Colored a -> Colored b -> Colored b #

(<*) :: Colored a -> Colored b -> Colored a #

Foldable Colored Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

fold :: Monoid m => Colored m -> m #

foldMap :: Monoid m => (a -> m) -> Colored a -> m #

foldr :: (a -> b -> b) -> b -> Colored a -> b #

foldr' :: (a -> b -> b) -> b -> Colored a -> b #

foldl :: (b -> a -> b) -> b -> Colored a -> b #

foldl' :: (b -> a -> b) -> b -> Colored a -> b #

foldr1 :: (a -> a -> a) -> Colored a -> a #

foldl1 :: (a -> a -> a) -> Colored a -> a #

toList :: Colored a -> [a] #

null :: Colored a -> Bool #

length :: Colored a -> Int #

elem :: Eq a => a -> Colored a -> Bool #

maximum :: Ord a => Colored a -> a #

minimum :: Ord a => Colored a -> a #

sum :: Num a => Colored a -> a #

product :: Num a => Colored a -> a #

Traversable Colored Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

traverse :: Applicative f => (a -> f b) -> Colored a -> f (Colored b) #

sequenceA :: Applicative f => Colored (f a) -> f (Colored a) #

mapM :: Monad m => (a -> m b) -> Colored a -> m (Colored b) #

sequence :: Monad m => Colored (m a) -> m (Colored a) #

IsList (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Associated Types

type Item (Colored a) :: Type #

Methods

fromList :: [Item (Colored a)] -> Colored a #

fromListN :: Int -> [Item (Colored a)] -> Colored a #

toList :: Colored a -> [Item (Colored a)] #

Eq a => Eq (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

(==) :: Colored a -> Colored a -> Bool #

(/=) :: Colored a -> Colored a -> Bool #

Ord a => Ord (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

compare :: Colored a -> Colored a -> Ordering #

(<) :: Colored a -> Colored a -> Bool #

(<=) :: Colored a -> Colored a -> Bool #

(>) :: Colored a -> Colored a -> Bool #

(>=) :: Colored a -> Colored a -> Bool #

max :: Colored a -> Colored a -> Colored a #

min :: Colored a -> Colored a -> Colored a #

Read a => Read (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Show a => Show (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

showsPrec :: Int -> Colored a -> ShowS #

show :: Colored a -> String #

showList :: [Colored a] -> ShowS #

IsString a => IsString (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

fromString :: String -> Colored a #

Generic (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Associated Types

type Rep (Colored a) :: Type -> Type #

Methods

from :: Colored a -> Rep (Colored a) x #

to :: Rep (Colored a) x -> Colored a #

Semigroup (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

(<>) :: Colored a -> Colored a -> Colored a #

sconcat :: NonEmpty (Colored a) -> Colored a #

stimes :: Integral b => b -> Colored a -> Colored a #

Monoid (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Methods

mempty :: Colored a #

mappend :: Colored a -> Colored a -> Colored a #

mconcat :: [Colored a] -> Colored a #

Generic1 Colored Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

Associated Types

type Rep1 Colored :: k -> Type #

Methods

from1 :: Colored a -> Rep1 Colored a #

to1 :: Rep1 Colored a -> Colored a #

type Rep (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

type Rep (Colored a) = D1 (MetaData "Colored" "Data.Monoid.Colorful.Nested" "colorful-monoids-0.2.1.3-KQ4pdXOAU8zLHhz6xJWI7W" False) ((C1 (MetaCons "Nil" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "Value" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 a)) :+: C1 (MetaCons "Style" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Style) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Colored a))))) :+: ((C1 (MetaCons "Unstyle" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Style) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Colored a))) :+: C1 (MetaCons "Fg" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Color) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Colored a)))) :+: (C1 (MetaCons "Bg" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Color) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Colored a))) :+: C1 (MetaCons "Pair" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Colored a)) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Colored a))))))
type Item (Colored a) Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

type Item (Colored a) = Colored a
type Rep1 Colored Source # 
Instance details

Defined in Data.Monoid.Colorful.Nested

type Rep1 Colored = D1 (MetaData "Colored" "Data.Monoid.Colorful.Nested" "colorful-monoids-0.2.1.3-KQ4pdXOAU8zLHhz6xJWI7W" False) ((C1 (MetaCons "Nil" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "Value" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) Par1) :+: C1 (MetaCons "Style" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Style) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec1 Colored)))) :+: ((C1 (MetaCons "Unstyle" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Style) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec1 Colored)) :+: C1 (MetaCons "Fg" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Color) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec1 Colored))) :+: (C1 (MetaCons "Bg" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Color) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec1 Colored)) :+: C1 (MetaCons "Pair" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec1 Colored) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec1 Colored)))))

data Style Source #

Rendering style

Constructors

Bold

Bold font

Italic

Italic font

Underline

Underlined text

Invert

Invert foreground and background color

Blink

Blinking

Instances
Bounded Style Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Enum Style Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Eq Style Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Methods

(==) :: Style -> Style -> Bool #

(/=) :: Style -> Style -> Bool #

Ord Style Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Methods

compare :: Style -> Style -> Ordering #

(<) :: Style -> Style -> Bool #

(<=) :: Style -> Style -> Bool #

(>) :: Style -> Style -> Bool #

(>=) :: Style -> Style -> Bool #

max :: Style -> Style -> Style #

min :: Style -> Style -> Style #

Read Style Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Show Style Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Methods

showsPrec :: Int -> Style -> ShowS #

show :: Style -> String #

showList :: [Style] -> ShowS #

Generic Style Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Associated Types

type Rep Style :: Type -> Type #

Methods

from :: Style -> Rep Style x #

to :: Rep Style x -> Style #

type Rep Style Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

type Rep Style = D1 (MetaData "Style" "Data.Monoid.Colorful.Color" "colorful-monoids-0.2.1.3-KQ4pdXOAU8zLHhz6xJWI7W" False) ((C1 (MetaCons "Bold" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "Italic" PrefixI False) (U1 :: Type -> Type)) :+: (C1 (MetaCons "Underline" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "Invert" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "Blink" PrefixI False) (U1 :: Type -> Type))))

data Color Source #

Named colors, 256 and RGB colors for more capable terminals.

Constructors

DefaultColor

Default terminal color (terminal specific)

Black 
Red 
Green 
Yellow 
Blue 
Magenta 
Cyan 
White 
DullBlack 
DullRed 
DullGreen 
DullYellow 
DullBlue 
DullMagenta 
DullCyan 
DullWhite 
Color256 !Word8

Color from 256 color scheme. Color is automatically reduced to 8 colors for less capable terminals.

RGB !Word8 !Word8 !Word8

True color. Color is automatically reduced to 256 or 8 colors for less capable terminals.

Instances
Eq Color Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Methods

(==) :: Color -> Color -> Bool #

(/=) :: Color -> Color -> Bool #

Ord Color Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Methods

compare :: Color -> Color -> Ordering #

(<) :: Color -> Color -> Bool #

(<=) :: Color -> Color -> Bool #

(>) :: Color -> Color -> Bool #

(>=) :: Color -> Color -> Bool #

max :: Color -> Color -> Color #

min :: Color -> Color -> Color #

Read Color Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Show Color Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Methods

showsPrec :: Int -> Color -> ShowS #

show :: Color -> String #

showList :: [Color] -> ShowS #

Generic Color Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

Associated Types

type Rep Color :: Type -> Type #

Methods

from :: Color -> Rep Color x #

to :: Rep Color x -> Color #

type Rep Color Source # 
Instance details

Defined in Data.Monoid.Colorful.Color

type Rep Color = D1 (MetaData "Color" "Data.Monoid.Colorful.Color" "colorful-monoids-0.2.1.3-KQ4pdXOAU8zLHhz6xJWI7W" False) ((((C1 (MetaCons "DefaultColor" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "Black" PrefixI False) (U1 :: Type -> Type)) :+: (C1 (MetaCons "Red" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "Green" PrefixI False) (U1 :: Type -> Type))) :+: ((C1 (MetaCons "Yellow" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "Blue" PrefixI False) (U1 :: Type -> Type)) :+: (C1 (MetaCons "Magenta" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "Cyan" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "White" PrefixI False) (U1 :: Type -> Type))))) :+: (((C1 (MetaCons "DullBlack" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "DullRed" PrefixI False) (U1 :: Type -> Type)) :+: (C1 (MetaCons "DullGreen" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "DullYellow" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "DullBlue" PrefixI False) (U1 :: Type -> Type)))) :+: ((C1 (MetaCons "DullMagenta" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "DullCyan" PrefixI False) (U1 :: Type -> Type)) :+: (C1 (MetaCons "DullWhite" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "Color256" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Word8)) :+: C1 (MetaCons "RGB" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Word8) :*: (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Word8) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Word8))))))))

Terminal type

data Term Source #

Terminal type. For less capable terminals the color depth is automatically reduced.

Constructors

TermDumb

Dumb terminal - no color output

Term8

8 colors supported

Term256

256 colors supported

TermRGB

True colors supported

TermWin

Windows terminal. Will use emulation (Not yet implemented).

Instances
Bounded Term Source # 
Instance details

Defined in Data.Monoid.Colorful.Term

Enum Term Source # 
Instance details

Defined in Data.Monoid.Colorful.Term

Methods

succ :: Term -> Term #

pred :: Term -> Term #

toEnum :: Int -> Term #

fromEnum :: Term -> Int #

enumFrom :: Term -> [Term] #

enumFromThen :: Term -> Term -> [Term] #

enumFromTo :: Term -> Term -> [Term] #

enumFromThenTo :: Term -> Term -> Term -> [Term] #

Eq Term Source # 
Instance details

Defined in Data.Monoid.Colorful.Term

Methods

(==) :: Term -> Term -> Bool #

(/=) :: Term -> Term -> Bool #

Ord Term Source # 
Instance details

Defined in Data.Monoid.Colorful.Term

Methods

compare :: Term -> Term -> Ordering #

(<) :: Term -> Term -> Bool #

(<=) :: Term -> Term -> Bool #

(>) :: Term -> Term -> Bool #

(>=) :: Term -> Term -> Bool #

max :: Term -> Term -> Term #

min :: Term -> Term -> Term #

Read Term Source # 
Instance details

Defined in Data.Monoid.Colorful.Term

Show Term Source # 
Instance details

Defined in Data.Monoid.Colorful.Term

Methods

showsPrec :: Int -> Term -> ShowS #

show :: Term -> String #

showList :: [Term] -> ShowS #

Generic Term Source # 
Instance details

Defined in Data.Monoid.Colorful.Term

Associated Types

type Rep Term :: Type -> Type #

Methods

from :: Term -> Rep Term x #

to :: Rep Term x -> Term #

type Rep Term Source # 
Instance details

Defined in Data.Monoid.Colorful.Term

type Rep Term = D1 (MetaData "Term" "Data.Monoid.Colorful.Term" "colorful-monoids-0.2.1.3-KQ4pdXOAU8zLHhz6xJWI7W" False) ((C1 (MetaCons "TermDumb" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "Term8" PrefixI False) (U1 :: Type -> Type)) :+: (C1 (MetaCons "Term256" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "TermRGB" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "TermWin" PrefixI False) (U1 :: Type -> Type))))

hGetTerm :: Handle -> IO Term Source #

The action (hGetTerm handle) determines the terminal type of the file handle.

The terminal type is determined by checking if the file handle points to a device and by looking at the $TERM environment variable.

Colorful printing to file handle

hPrintColored :: (Handle -> a -> IO ()) -> Handle -> Term -> Colored a -> IO () Source #

printColored :: (a -> IO ()) -> Term -> Colored a -> IO () Source #

Show with ANSI escape sequences

showColored :: Monoid o => (a -> o) -> (SGRCode -> o) -> Term -> Colored a -> o Source #

showColoredM :: (Monad f, Monoid o) => (a -> f o) -> (SGRCode -> f o) -> Term -> Colored a -> f o Source #

Reexport from Data.Semigroup

(<>) :: Semigroup a => a -> a -> a infixr 6 #

An associative operation.