-- | 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 @Fmt@ type 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" — @Cons@ pattern functor, streaming metamorphisms
-- * "Data.Fmt.Functor" — @Doc@ pattern functor, @Tree@ type alias
-- * "Data.Fmt.Kan" — Kan extension connections (Day, Yoneda, Codensity, etc.)
module Data.Fmt (
    -- * Core Fmt type (from Data.Fmt.Type)
    Fmt (..),
    runFmt,
    Fmt1,
    Fmt2,
    Fmt3,
    fmt1,
    fmt2,
    fmt1_,
    fmt2_,
    (.%),
    cat1,
    fmt,
    (%),
    apply,
    bind,
    refmt,
    prefix,
    suffix,
    enclose,
    tuple,
    quotes,
    quotes',
    parens,
    braces,
    brackets,
    backticks,
    left1,
    right1,
    either1,
    maybe1,

    -- * Tree type (from Data.Fmt.Functor)
    Tree,

    -- * Pretty-printing (from Data.Fmt.Tree)
    -- ** Smart constructors
    emptyDoc,
    leaf,
    hardline,
    line,
    line',
    softline,
    softline',
    flatAlt,
    nest,
    group,
    annotate,
    column,
    nesting,

    -- ** Separators
    (<+>),
    hsep,
    vsep,
    sep,
    hcat,
    vcat,
    cat,
    fillSep,
    fillCat,

    -- ** Indentation
    align,
    hang,
    indent,

    -- ** Enclosure
    list,
    tupled,
    encloseSep,
    surround,
    punctuate,

    -- ** Layout and rendering
    LayoutOptions (..),
    PageWidth (..),
    defaultLayoutOptions,
    pretty,

    -- * Numeric encoders (from Data.Fmt.Code)
    c,
    s,
    d,
    u,
    x,
    e,
    f,
    g,
) where

import Data.Fmt.Type hiding (cat, indent)
import Data.Fmt.Functor (Tree)
import Data.Fmt.Tree
    ( emptyDoc, leaf, hardline, line, line', softline, softline'
    , flatAlt, nest, group, annotate, column, nesting
    , (<+>), hsep, vsep, sep, hcat, vcat, cat, fillSep, fillCat
    , align, hang, indent
    , list, tupled, encloseSep, surround, punctuate
    , LayoutOptions(..), PageWidth(..), defaultLayoutOptions, pretty
    )
import Data.Fmt.Code (c, s, d, u, x, e, f, g)