| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Data.Fmt
Description
Type-safe string formatting and pretty-printing.
This module re-exports the most commonly used parts of the library. For specialized functionality, import the submodules directly:
- Data.Fmt.Type — core
Fmttype and combinators - Data.Fmt.Tree — pretty-printing: smart constructors, layout, rendering
- Data.Fmt.Code — numeric/binary encoders (
d,x,s, etc.) - Data.Fmt.ByteString —
ByteFmt,runByteFmt,printf - Data.Fmt.Text —
TextFmt,runTextFmt - Data.Fmt.String —
StringFmt,runStringFmt - Data.Fmt.Fixed — fixed points (
Mu,Fix,Nu) and recursion schemes - Data.Fmt.Cons —
Conspattern functor, streaming metamorphisms - Data.Fmt.Functor —
Docpattern functor,Treetype alias - Data.Fmt.Kan — Kan extension connections (Day, Yoneda, Codensity, etc.)
Synopsis
- newtype Fmt m a b = Fmt {
- unFmt :: (m -> a) -> b
- runFmt :: Fmt m m a -> a
- type Fmt1 m s a = Fmt m s (a -> s)
- type Fmt2 m s a b = Fmt m s (a -> b -> s)
- type Fmt3 m s a b c = Fmt m s (a -> b -> c -> s)
- fmt1 :: (a -> m) -> Fmt1 m s a
- fmt2 :: (a -> b -> m) -> Fmt2 m s a b
- fmt1_ :: Fmt m a a -> Fmt1 m a b
- fmt2_ :: Fmt m a a -> Fmt2 m a b c
- (.%) :: Semigroup m => Fmt1 m s a -> Fmt1 m s a -> Fmt1 m s a
- cat1 :: (Monoid m, Foldable f) => Fmt1 m m a -> Fmt1 m s (f a)
- fmt :: m -> Fmt m a a
- (%) :: Semigroup m => Fmt m b c -> Fmt m a b -> Fmt m a c
- apply :: Fmt1 m s m -> Fmt m s a -> Fmt m s a
- bind :: Fmt m a1 b -> (m -> Fmt m a2 a1) -> Fmt m a2 b
- refmt :: (m1 -> m2) -> Fmt m1 a b -> Fmt m2 a b
- prefix :: Semigroup m => m -> Fmt m a b -> Fmt m a b
- suffix :: Semigroup m => m -> Fmt m a b -> Fmt m a b
- enclose :: Semigroup m => Fmt m b2 c -> Fmt m a b1 -> Fmt m b1 b2 -> Fmt m a c
- tuple :: (Semigroup m, IsString m) => Fmt m b c -> Fmt m a b -> Fmt m a c
- quotes :: (Semigroup m, IsString m) => Fmt m a b -> Fmt m a b
- quotes' :: (Semigroup m, IsString m) => Fmt m a b -> Fmt m a b
- parens :: (Semigroup m, IsString m) => Fmt m a b -> Fmt m a b
- braces :: (Semigroup m, IsString m) => Fmt m a b -> Fmt m a b
- brackets :: (Semigroup m, IsString m) => Fmt m a b -> Fmt m a b
- backticks :: (Semigroup m, IsString m) => Fmt m a b -> Fmt m a b
- left1 :: IsString m => Fmt1 m m a -> Fmt1 m s (Either a b)
- right1 :: IsString m => Fmt1 m m b -> Fmt1 m s (Either a b)
- either1 :: Fmt1 m m a -> Fmt1 m m b -> Fmt1 m s (Either a b)
- maybe1 :: m -> Fmt1 m m a -> Fmt1 m s (Maybe a)
- type Tree m ann = Mu (Doc m ann)
- emptyDoc :: Tree m ann
- leaf :: Int -> m -> Tree m ann
- hardline :: Tree m ann
- line :: IsString m => Tree m ann
- line' :: Tree m ann
- softline :: IsString m => Tree m ann
- softline' :: Tree m ann
- flatAlt :: Tree m ann -> Tree m ann -> Tree m ann
- nest :: Int -> Tree m ann -> Tree m ann
- group :: Tree m ann -> Tree m ann
- annotate :: ann -> Tree m ann -> Tree m ann
- column :: (Int -> Tree m ann) -> Tree m ann
- nesting :: (Int -> Tree m ann) -> Tree m ann
- (<+>) :: IsString m => Tree m ann -> Tree m ann -> Tree m ann
- hsep :: IsString m => [Tree m ann] -> Tree m ann
- vsep :: IsString m => [Tree m ann] -> Tree m ann
- sep :: IsString m => [Tree m ann] -> Tree m ann
- hcat :: [Tree m ann] -> Tree m ann
- vcat :: [Tree m ann] -> Tree m ann
- cat :: [Tree m ann] -> Tree m ann
- fillSep :: IsString m => [Tree m ann] -> Tree m ann
- fillCat :: [Tree m ann] -> Tree m ann
- align :: Tree m ann -> Tree m ann
- hang :: Int -> Tree m ann -> Tree m ann
- indent :: IsString m => Int -> Tree m ann -> Tree m ann
- list :: IsString m => [Tree m ann] -> Tree m ann
- tupled :: IsString m => [Tree m ann] -> Tree m ann
- encloseSep :: IsString m => Tree m ann -> Tree m ann -> Tree m ann -> [Tree m ann] -> Tree m ann
- surround :: Tree m ann -> Tree m ann -> Tree m ann -> Tree m ann
- punctuate :: Tree m ann -> [Tree m ann] -> [Tree m ann]
- newtype LayoutOptions = LayoutOptions {}
- data PageWidth
- defaultLayoutOptions :: LayoutOptions
- pretty :: (Monoid m, IsString m) => LayoutOptions -> Tree m ann -> m
- c :: IsString m => Fmt1 m s Char
- s :: (IsString m, Show a) => Fmt1 m s a
- d :: IsString m => Fmt1 m s Int
- u :: IsString m => Fmt1 m s Word
- x :: IsString m => Fmt1 m s Word
- e :: (IsString m, RealFloat a) => Int -> Fmt1 m s a
- f :: (IsString m, RealFloat a) => Int -> Fmt1 m s a
- g :: (IsString m, RealFloat a) => Int -> Fmt1 m s a
Core Fmt type (from Data.Fmt.Type)
An indexed continuation formatter.
Fmt m a b = (m -> a) -> b — the monoid m accumulates formatted
output, a is the result type, and b captures the arguments.
This is Costar ((->) m) from profunctors, giving Profunctor,
Closed, Costrong, Cochoice, Category, and Arrow instances.
Instances
| Monoid m => Category (Fmt m :: Type -> Type -> Type) Source # | |
| Monoid m => Arrow (Fmt m) Source # | |
| Cochoice (Fmt m) Source # | |
| Closed (Fmt m) Source # | |
| Corepresentable (Fmt m) Source # | |
| Costrong (Fmt m) Source # | |
| Monoid m => Strong (Fmt m) Source # | |
| Profunctor (Fmt m) Source # | |
Defined in Data.Fmt.Type Methods dimap :: (a -> b) -> (c -> d) -> Fmt m b c -> Fmt m a d Source # lmap :: (a -> b) -> Fmt m b c -> Fmt m a c Source # rmap :: (b -> c) -> Fmt m a b -> Fmt m a c Source # (#.) :: forall a b c q. Coercible c b => q b c -> Fmt m a b -> Fmt m a c Source # (.#) :: forall a b c q. Coercible b a => Fmt m b c -> q a b -> Fmt m a c Source # | |
| Cosieve (Fmt m) ((->) m) Source # | |
Defined in Data.Fmt.Type | |
| Applicative (Fmt m a) Source # | |
| Functor (Fmt m a) Source # | |
| Monad (Fmt m a) Source # | |
| (IsString m, a ~ b) => IsString (Fmt m a b) Source # | |
Defined in Data.Fmt.Type Methods fromString :: String -> Fmt m a b # | |
| Monoid m => Monoid (Fmt1 m s a) Source # | |
| Semigroup m => Semigroup (Fmt1 m s a) Source # | |
| type Corep (Fmt m) Source # | |
Defined in Data.Fmt.Type | |
type Fmt2 m s a b = Fmt m s (a -> b -> s) Source #
A binary formatter: Fmt2 m s a b ~ (m -> s) -> a -> b -> s
(.%) :: Semigroup m => Fmt1 m s a -> Fmt1 m s a -> Fmt1 m s a infixr 6 Source #
Concatenate two formatters, applying both to the same input.
cat1 :: (Monoid m, Foldable f) => Fmt1 m m a -> Fmt1 m s (f a) Source #
Format each value and concatenate.
(%) :: Semigroup m => Fmt m b c -> Fmt m a b -> Fmt m a c infixr 0 Source #
Concatenate two formatters.
enclose :: Semigroup m => Fmt m b2 c -> Fmt m a b1 -> Fmt m b1 b2 -> Fmt m a c Source #
Enclose with prefix and suffix.
tuple :: (Semigroup m, IsString m) => Fmt m b c -> Fmt m a b -> Fmt m a c Source #
Format a pair in parentheses.
left1 :: IsString m => Fmt1 m m a -> Fmt1 m s (Either a b) Source #
Format a Left, rendering Right as empty.
right1 :: IsString m => Fmt1 m m b -> Fmt1 m s (Either a b) Source #
Format a Right, rendering Left as empty.
Tree type (from Data.Fmt.Functor)
Pretty-printing (from Data.Fmt.Tree)
Smart constructors
softline :: IsString m => Tree m ann Source #
A line break that behaves like a space when flattened by group.
softline = group line
softline' :: Tree m ann Source #
A line break that vanishes when flattened by group.
softline' = group line'
flatAlt :: Tree m ann -> Tree m ann -> Tree m ann Source #
flatAlt default flat: use default normally,
flat when flattened by group.
group :: Tree m ann -> Tree m ann Source #
Try to lay out the document on a single line. Falls back to the original if flattening fails.
group x = union (flatten x) x
Separators
(<+>) :: IsString m => Tree m ann -> Tree m ann -> Tree m ann infixr 6 Source #
Concatenate with a space in between.
Indentation
align :: Tree m ann -> Tree m ann Source #
Lay out relative to the current column rather than the current nesting level.
align d = column (\k -> nesting (\i -> nest (k - i) d))
indent :: IsString m => Int -> Tree m ann -> Tree m ann Source #
indent i doc inserts i spaces then aligns.
Enclosure
encloseSep :: IsString m => Tree m ann -> Tree m ann -> Tree m ann -> [Tree m ann] -> Tree m ann Source #
Enclose a list with separators.
encloseSep lbrace rbrace comma [a, b, c] = lbrace <> a <> comma <> b <> comma <> c <> rbrace
When the content fits, renders on one line. Otherwise, each element gets its own line, aligned.
surround :: Tree m ann -> Tree m ann -> Tree m ann -> Tree m ann Source #
surround mid left right = left <> mid <> right
punctuate :: Tree m ann -> [Tree m ann] -> [Tree m ann] Source #
Append a separator to all but the last element.
Layout and rendering
newtype LayoutOptions Source #
Layout options.
Constructors
| LayoutOptions | |
Fields | |
Instances
| Show LayoutOptions Source # | |
Defined in Data.Fmt.Tree Methods showsPrec :: Int -> LayoutOptions -> ShowS # show :: LayoutOptions -> String # showList :: [LayoutOptions] -> ShowS # | |
| Eq LayoutOptions Source # | |
Defined in Data.Fmt.Tree Methods (==) :: LayoutOptions -> LayoutOptions -> Bool # (/=) :: LayoutOptions -> LayoutOptions -> Bool # | |
Page width configuration.
Constructors
| AvailablePerLine !Int !Double | AvailablePerLine maxColumns ribbonFraction |
| Unbounded |
Instances
defaultLayoutOptions :: LayoutOptions Source #
80 columns, ribbon fraction 1.0.
pretty :: (Monoid m, IsString m) => LayoutOptions -> Tree m ann -> m Source #
Lay out and render a document.
pretty opts = render . layoutPretty opts
Numeric encoders (from Data.Fmt.Code)
e :: (IsString m, RealFloat a) => Int -> Fmt1 m s a Source #
Scientific notation with prec digits of precision.