{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE LambdaCase #-}
module Formatting.Combinators
(
maybed
, optioned
, eithered
, lefted
, righted
, concatenated
, joinedWith
, intercalated
, unworded
, unlined
, spaced
, commaSep
, commaSpaceSep
, list
, qlist
, took
, dropped
, splat
, splatWith
, splatOn
, worded
, lined
, alteredWith
, charsKeptIf
, charsRemovedIf
, replaced
, uppercased
, lowercased
, titlecased
, ltruncated
, ctruncated
, rtruncated
, lpadded
, rpadded
, cpadded
, lfixed
, rfixed
, cfixed
, prefixed
, suffixed
, surrounded
, enclosed
, squoted
, dquoted
, parenthesised
, squared
, braced
, angled
, backticked
, indented
, indentedLines
, reindented
, roundedTo
, truncatedTo
, ceilingedTo
, flooredTo
, viewed
, accessed
, binPrefix
, octPrefix
, hexPrefix
) where
import Control.Applicative (Const(..), getConst)
import Control.Category ((>>>))
import Data.Foldable (toList)
import Data.Function ((&))
import Data.Int (Int64)
import Data.Text.Lazy (Text)
import qualified Data.Text.Lazy as TL
import Data.Text.Lazy.Builder (Builder)
import qualified Data.Text.Lazy.Builder as TLB
import Formatting.Internal
import Formatting.Formatters
maybed
:: Builder
-> Format Builder (a -> Builder)
-> Format r (Maybe a -> r)
maybed :: Builder -> Format Builder (a -> Builder) -> Format r (Maybe a -> r)
maybed whenNothing :: Builder
whenNothing f :: Format Builder (a -> Builder)
f = (Maybe a -> Builder) -> Format r (Maybe a -> r)
forall a r. (a -> Builder) -> Format r (a -> r)
later ((Maybe a -> Builder) -> Format r (Maybe a -> r))
-> (Maybe a -> Builder) -> Format r (Maybe a -> r)
forall a b. (a -> b) -> a -> b
$ \case
Nothing -> Builder
whenNothing
Just x :: a
x -> Format Builder (a -> Builder) -> a -> Builder
forall a. Format Builder a -> a
bformat Format Builder (a -> Builder)
f a
x
optioned :: Format Builder (a -> Builder) -> Format r (Maybe a -> r)
optioned :: Format Builder (a -> Builder) -> Format r (Maybe a -> r)
optioned = Builder -> Format Builder (a -> Builder) -> Format r (Maybe a -> r)
forall a r.
Builder -> Format Builder (a -> Builder) -> Format r (Maybe a -> r)
maybed ""
eithered
:: Format Builder (a -> Builder)
-> Format Builder (b -> Builder)
-> Format r (Either a b -> r)
eithered :: Format Builder (a -> Builder)
-> Format Builder (b -> Builder) -> Format r (Either a b -> r)
eithered l :: Format Builder (a -> Builder)
l r :: Format Builder (b -> Builder)
r = (Either a b -> Builder) -> Format r (Either a b -> r)
forall a r. (a -> Builder) -> Format r (a -> r)
later ((Either a b -> Builder) -> Format r (Either a b -> r))
-> (Either a b -> Builder) -> Format r (Either a b -> r)
forall a b. (a -> b) -> a -> b
$ \case
Left x :: a
x -> Format Builder (a -> Builder) -> a -> Builder
forall a. Format Builder a -> a
bformat Format Builder (a -> Builder)
l a
x
Right x :: b
x -> Format Builder (b -> Builder) -> b -> Builder
forall a. Format Builder a -> a
bformat Format Builder (b -> Builder)
r b
x
lefted :: Format Builder (a -> Builder) -> Format r (Either a x -> r)
lefted :: Format Builder (a -> Builder) -> Format r (Either a x -> r)
lefted f :: Format Builder (a -> Builder)
f = Format Builder (a -> Builder)
-> Format Builder (x -> Builder) -> Format r (Either a x -> r)
forall a b r.
Format Builder (a -> Builder)
-> Format Builder (b -> Builder) -> Format r (Either a b -> r)
eithered Format Builder (a -> Builder)
f (Builder -> Format Builder (x -> Builder)
forall r a. Builder -> Format r (a -> r)
fconst "")
righted :: Format Builder (a -> Builder) -> Format r (Either x a -> r)
righted :: Format Builder (a -> Builder) -> Format r (Either x a -> r)
righted = Format Builder (x -> Builder)
-> Format Builder (a -> Builder) -> Format r (Either x a -> r)
forall a b r.
Format Builder (a -> Builder)
-> Format Builder (b -> Builder) -> Format r (Either a b -> r)
eithered (Builder -> Format Builder (x -> Builder)
forall r a. Builder -> Format r (a -> r)
fconst "")
concatenated :: Foldable t => Format Builder (a -> Builder) -> Format r (t a -> r)
concatenated :: Format Builder (a -> Builder) -> Format r (t a -> r)
concatenated f :: Format Builder (a -> Builder)
f = (t a -> Builder) -> Format r (t a -> r)
forall a r. (a -> Builder) -> Format r (a -> r)
later ((t a -> Builder) -> Format r (t a -> r))
-> (t a -> Builder) -> Format r (t a -> r)
forall a b. (a -> b) -> a -> b
$ (a -> Builder) -> t a -> Builder
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Format Builder (a -> Builder) -> a -> Builder
forall a. Format Builder a -> a
bformat Format Builder (a -> Builder)
f)
joinedWith :: Foldable t => ([Text] -> Text) -> Format Builder (a -> Builder) -> Format r (t a -> r)
joinedWith :: ([Text] -> Text)
-> Format Builder (a -> Builder) -> Format r (t a -> r)
joinedWith joiner :: [Text] -> Text
joiner f :: Format Builder (a -> Builder)
f = (t a -> Builder) -> Format r (t a -> r)
forall a r. (a -> Builder) -> Format r (a -> r)
later ((t a -> Builder) -> Format r (t a -> r))
-> (t a -> Builder) -> Format r (t a -> r)
forall a b. (a -> b) -> a -> b
$ t a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList
(t a -> [a]) -> ([a] -> Builder) -> t a -> Builder
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> (a -> Text) -> [a] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Format Builder (a -> Builder) -> a -> Builder
forall a. Format Builder a -> a
bformat Format Builder (a -> Builder)
f (a -> Builder) -> (Builder -> Text) -> a -> Text
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Builder -> Text
TLB.toLazyText)
([a] -> [Text]) -> ([Text] -> Builder) -> [a] -> Builder
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> [Text] -> Text
joiner
([Text] -> Text) -> (Text -> Builder) -> [Text] -> Builder
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Text -> Builder
TLB.fromLazyText
intercalated :: Foldable t => Text -> Format Builder (a -> Builder) -> Format r (t a -> r)
intercalated :: Text -> Format Builder (a -> Builder) -> Format r (t a -> r)
intercalated s :: Text
s = ([Text] -> Text)
-> Format Builder (a -> Builder) -> Format r (t a -> r)
forall (t :: * -> *) a r.
Foldable t =>
([Text] -> Text)
-> Format Builder (a -> Builder) -> Format r (t a -> r)
joinedWith (Text -> [Text] -> Text
TL.intercalate Text
s)
unworded :: Foldable t => Format Builder (a -> Builder) -> Format r (t a -> r)
unworded :: Format Builder (a -> Builder) -> Format r (t a -> r)
unworded = ([Text] -> Text)
-> Format Builder (a -> Builder) -> Format r (t a -> r)
forall (t :: * -> *) a r.
Foldable t =>
([Text] -> Text)
-> Format Builder (a -> Builder) -> Format r (t a -> r)
joinedWith [Text] -> Text
TL.unwords
unlined :: Foldable t => Format Builder (a -> Builder) -> Format r (t a -> r)
unlined :: Format Builder (a -> Builder) -> Format r (t a -> r)
unlined = ([Text] -> Text)
-> Format Builder (a -> Builder) -> Format r (t a -> r)
forall (t :: * -> *) a r.
Foldable t =>
([Text] -> Text)
-> Format Builder (a -> Builder) -> Format r (t a -> r)
joinedWith [Text] -> Text
TL.unlines
spaced :: Foldable t => Format Builder (a -> Builder) -> Format r (t a -> r)
spaced :: Format Builder (a -> Builder) -> Format r (t a -> r)
spaced = Text -> Format Builder (a -> Builder) -> Format r (t a -> r)
forall (t :: * -> *) a r.
Foldable t =>
Text -> Format Builder (a -> Builder) -> Format r (t a -> r)
intercalated " "
commaSep :: Foldable t => Format Builder (a -> Builder) -> Format r (t a -> r)
commaSep :: Format Builder (a -> Builder) -> Format r (t a -> r)
commaSep = Text -> Format Builder (a -> Builder) -> Format r (t a -> r)
forall (t :: * -> *) a r.
Foldable t =>
Text -> Format Builder (a -> Builder) -> Format r (t a -> r)
intercalated ","
commaSpaceSep :: Foldable t => Format Builder (a -> Builder) -> Format r (t a -> r)
commaSpaceSep :: Format Builder (a -> Builder) -> Format r (t a -> r)
commaSpaceSep = Text -> Format Builder (a -> Builder) -> Format r (t a -> r)
forall (t :: * -> *) a r.
Foldable t =>
Text -> Format Builder (a -> Builder) -> Format r (t a -> r)
intercalated ", "
list :: Foldable t => Format Builder (a -> Builder) -> Format r (t a -> r)
list :: Format Builder (a -> Builder) -> Format r (t a -> r)
list = Format Builder (a -> Builder) -> Format r (t a -> r)
forall (t :: * -> *) a r.
Foldable t =>
Format Builder (a -> Builder) -> Format r (t a -> r)
commaSpaceSep (Format Builder (a -> Builder) -> Format r (t a -> r))
-> (Format r (t a -> r) -> Format r (t a -> r))
-> Format Builder (a -> Builder)
-> Format r (t a -> r)
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Format r (t a -> r) -> Format r (t a -> r)
forall r a. Format r a -> Format r a
squared
qlist :: Foldable t => Format Builder (a -> Builder) -> Format r (t a -> r)
qlist :: Format Builder (a -> Builder) -> Format r (t a -> r)
qlist = Format Builder (a -> Builder) -> Format Builder (a -> Builder)
forall r a. Format r a -> Format r a
dquoted (Format Builder (a -> Builder) -> Format Builder (a -> Builder))
-> (Format Builder (a -> Builder) -> Format r (t a -> r))
-> Format Builder (a -> Builder)
-> Format r (t a -> r)
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Format Builder (a -> Builder) -> Format r (t a -> r)
forall (t :: * -> *) a r.
Foldable t =>
Format Builder (a -> Builder) -> Format r (t a -> r)
commaSpaceSep (Format Builder (a -> Builder) -> Format r (t a -> r))
-> (Format r (t a -> r) -> Format r (t a -> r))
-> Format Builder (a -> Builder)
-> Format r (t a -> r)
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Format r (t a -> r) -> Format r (t a -> r)
forall r a. Format r a -> Format r a
squared
took :: Int -> Format r ([a] -> r) -> Format r ([a] -> r)
took :: Int -> Format r ([a] -> r) -> Format r ([a] -> r)
took n :: Int
n = (([a] -> r) -> [a] -> r)
-> Format r ([a] -> r) -> Format r ([a] -> r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (([a] -> r) -> ([a] -> [a]) -> [a] -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take Int
n)
dropped :: Int -> Format r ([a] -> r) -> Format r ([a] -> r)
dropped :: Int -> Format r ([a] -> r) -> Format r ([a] -> r)
dropped n :: Int
n = (([a] -> r) -> [a] -> r)
-> Format r ([a] -> r) -> Format r ([a] -> r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (([a] -> r) -> ([a] -> [a]) -> [a] -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
drop Int
n)
splatWith
:: (Text -> [Text])
-> (Format r' (Builder -> r') -> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splatWith :: (Text -> [Text])
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splatWith splitter :: Text -> [Text]
splitter lf :: Format r' (Builder -> r') -> Format Builder ([Builder] -> Builder)
lf f :: Format r a
f = (Builder -> Builder) -> Format r (Builder -> r)
forall a r. (a -> Builder) -> Format r (a -> r)
later (Builder -> Text
TLB.toLazyText
(Builder -> Text) -> (Text -> Builder) -> Builder -> Builder
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Text -> [Text]
splitter
(Text -> [Text]) -> ([Text] -> Builder) -> Text -> Builder
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> (Text -> Builder) -> [Text] -> [Builder]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Text -> Builder
TLB.fromLazyText
([Text] -> [Builder])
-> ([Builder] -> Builder) -> [Text] -> Builder
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Format Builder ([Builder] -> Builder) -> [Builder] -> Builder
forall a. Format Builder a -> a
bformat (Format r' (Builder -> r') -> Format Builder ([Builder] -> Builder)
lf Format r' (Builder -> r')
forall r. Format r (Builder -> r)
builder))
Format r (Builder -> r) -> Format r a -> Format r a
forall r r' a.
Format r (Builder -> r') -> Format r' a -> Format r a
%. Format r a
f
splat
:: (Char -> Bool)
-> (Format r' (Builder -> r') -> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splat :: (Char -> Bool)
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splat p :: Char -> Bool
p = (Text -> [Text])
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
forall r' r a.
(Text -> [Text])
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splatWith ((Char -> Bool) -> Text -> [Text]
TL.split Char -> Bool
p)
splatOn
:: Text
-> (Format r' (Builder -> r') -> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splatOn :: Text
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splatOn t :: Text
t = (Text -> [Text])
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
forall r' r a.
(Text -> [Text])
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splatWith (Text -> Text -> [Text]
TL.splitOn Text
t)
worded
:: (Format r' (Builder -> r') -> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
worded :: (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a -> Format r a
worded = (Text -> [Text])
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
forall r' r a.
(Text -> [Text])
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splatWith Text -> [Text]
TL.words
lined
:: (Format Builder (Builder -> Builder) -> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
lined :: (Format Builder (Builder -> Builder)
-> Format Builder ([Builder] -> Builder))
-> Format r a -> Format r a
lined = (Text -> [Text])
-> (Format Builder (Builder -> Builder)
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
forall r' r a.
(Text -> [Text])
-> (Format r' (Builder -> r')
-> Format Builder ([Builder] -> Builder))
-> Format r a
-> Format r a
splatWith Text -> [Text]
TL.lines
alteredWith :: (Text -> Text) -> Format r a -> Format r a
alteredWith :: (Text -> Text) -> Format r a -> Format r a
alteredWith alterer :: Text -> Text
alterer f :: Format r a
f =
(Builder -> Builder) -> Format r (Builder -> r)
forall a r. (a -> Builder) -> Format r (a -> r)
later (Builder -> Text
TLB.toLazyText (Builder -> Text) -> (Text -> Builder) -> Builder -> Builder
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Text -> Text
alterer (Text -> Text) -> (Text -> Builder) -> Text -> Builder
forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Text -> Builder
TLB.fromLazyText) Format r (Builder -> r) -> Format r a -> Format r a
forall r r' a.
Format r (Builder -> r') -> Format r' a -> Format r a
%. Format r a
f
charsKeptIf :: (Char -> Bool) -> Format r a -> Format r a
charsKeptIf :: (Char -> Bool) -> Format r a -> Format r a
charsKeptIf p :: Char -> Bool
p = (Text -> Text) -> Format r a -> Format r a
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith ((Char -> Bool) -> Text -> Text
TL.filter Char -> Bool
p)
charsRemovedIf :: (Char -> Bool) -> Format r a -> Format r a
charsRemovedIf :: (Char -> Bool) -> Format r a -> Format r a
charsRemovedIf p :: Char -> Bool
p = (Text -> Text) -> Format r a -> Format r a
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith ((Char -> Bool) -> Text -> Text
TL.filter (Bool -> Bool
not (Bool -> Bool) -> (Char -> Bool) -> Char -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Bool
p))
replaced :: Text -> Text -> Format r a -> Format r a
replaced :: Text -> Text -> Format r a -> Format r a
replaced needle :: Text
needle replacement :: Text
replacement = (Text -> Text) -> Format r a -> Format r a
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith (Text -> Text -> Text -> Text
TL.replace Text
needle Text
replacement)
uppercased :: Format r a -> Format r a
uppercased :: Format r a -> Format r a
uppercased = (Text -> Text) -> Format r a -> Format r a
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith Text -> Text
TL.toUpper
lowercased :: Format r a -> Format r a
lowercased :: Format r a -> Format r a
lowercased = (Text -> Text) -> Format r a -> Format r a
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith Text -> Text
TL.toLower
titlecased :: Format r a -> Format r a
titlecased :: Format r a -> Format r a
titlecased = (Text -> Text) -> Format r a -> Format r a
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith Text -> Text
TL.toTitle
ltruncated :: Int64 -> Format r a -> Format r a
ltruncated :: Int64 -> Format r a -> Format r a
ltruncated n :: Int64
n = Int64 -> Int64 -> Format r a -> Format r a
forall r a. Int64 -> Int64 -> Format r a -> Format r a
ctruncated (Int64
n Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
- 3) 0
rtruncated :: Int64 -> Format r a -> Format r a
rtruncated :: Int64 -> Format r a -> Format r a
rtruncated n :: Int64
n = Int64 -> Int64 -> Format r a -> Format r a
forall r a. Int64 -> Int64 -> Format r a -> Format r a
ctruncated 0 (Int64
n Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
- 3)
ctruncated :: Int64 -> Int64 -> Format r a -> Format r a
ctruncated :: Int64 -> Int64 -> Format r a -> Format r a
ctruncated start :: Int64
start end :: Int64
end = (Text -> Text) -> Format r a -> Format r a
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith Text -> Text
shorten
where
shorten :: Text -> Text
shorten :: Text -> Text
shorten txt :: Text
txt =
let n :: Int64
n = Int64
start Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ Int64
end Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ 3
in if Text -> Int64
TL.length Text
txt Int64 -> Int64 -> Bool
forall a. Ord a => a -> a -> Bool
<= Int64
n
then Text
txt
else Int64 -> Text -> Text
TL.take Int64
start Text
txt Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> "..." Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int64 -> Text -> Text
TL.takeEnd Int64
end Text
txt
lpadded :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
lpadded :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
lpadded i :: Int64
i c :: Char
c = (Text -> Text) -> Format r (a -> r) -> Format r (a -> r)
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith (Int64 -> Char -> Text -> Text
TL.justifyRight Int64
i Char
c)
rpadded :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
rpadded :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
rpadded i :: Int64
i c :: Char
c = (Text -> Text) -> Format r (a -> r) -> Format r (a -> r)
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith (Int64 -> Char -> Text -> Text
TL.justifyLeft Int64
i Char
c)
cpadded :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
cpadded :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
cpadded i :: Int64
i c :: Char
c = (Text -> Text) -> Format r (a -> r) -> Format r (a -> r)
forall r a. (Text -> Text) -> Format r a -> Format r a
alteredWith (Int64 -> Char -> Text -> Text
TL.center Int64
i Char
c)
lfixed :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
lfixed :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
lfixed n :: Int64
n c :: Char
c = Int64 -> Format r (a -> r) -> Format r (a -> r)
forall r a. Int64 -> Format r a -> Format r a
ltruncated Int64
n (Format r (a -> r) -> Format r (a -> r))
-> (Format r (a -> r) -> Format r (a -> r))
-> Format r (a -> r)
-> Format r (a -> r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
forall r a. Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
rpadded Int64
n Char
c
rfixed :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
rfixed :: Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
rfixed n :: Int64
n c :: Char
c = Int64 -> Format r (a -> r) -> Format r (a -> r)
forall r a. Int64 -> Format r a -> Format r a
rtruncated Int64
n (Format r (a -> r) -> Format r (a -> r))
-> (Format r (a -> r) -> Format r (a -> r))
-> Format r (a -> r)
-> Format r (a -> r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
forall r a. Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
lpadded Int64
n Char
c
cfixed :: Int64 -> Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
cfixed :: Int64 -> Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
cfixed l :: Int64
l r :: Int64
r c :: Char
c = Int64 -> Int64 -> Format r (a -> r) -> Format r (a -> r)
forall r a. Int64 -> Int64 -> Format r a -> Format r a
ctruncated Int64
l Int64
r (Format r (a -> r) -> Format r (a -> r))
-> (Format r (a -> r) -> Format r (a -> r))
-> Format r (a -> r)
-> Format r (a -> r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
forall r a. Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
cpadded (Int64
l Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ Int64
r Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ 3) Char
c
prefixed :: Builder -> Format r a -> Format r a
prefixed :: Builder -> Format r a -> Format r a
prefixed s :: Builder
s f :: Format r a
f = Builder -> Format a a
forall r. Builder -> Format r r
now Builder
s Format a a -> Format r a -> Format r a
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r a
f
suffixed :: Builder -> Format r a -> Format r a
suffixed :: Builder -> Format r a -> Format r a
suffixed s :: Builder
s f :: Format r a
f = Format r a
f Format r a -> Format r r -> Format r a
forall r a r'. Format r a -> Format r' r -> Format r' a
% Builder -> Format r r
forall r. Builder -> Format r r
now Builder
s
surrounded :: Builder -> Format r a -> Format r a
surrounded :: Builder -> Format r a -> Format r a
surrounded s :: Builder
s f :: Format r a
f = Builder -> Format a a
forall r. Builder -> Format r r
now Builder
s Format a a -> Format r a -> Format r a
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r a
f Format r a -> Format r r -> Format r a
forall r a r'. Format r a -> Format r' r -> Format r' a
% Builder -> Format r r
forall r. Builder -> Format r r
now Builder
s
enclosed :: Builder -> Builder -> Format r a -> Format r a
enclosed :: Builder -> Builder -> Format r a -> Format r a
enclosed pre :: Builder
pre suf :: Builder
suf f :: Format r a
f = Builder -> Format a a
forall r. Builder -> Format r r
now Builder
pre Format a a -> Format r a -> Format r a
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r a
f Format r a -> Format r r -> Format r a
forall r a r'. Format r a -> Format r' r -> Format r' a
% Builder -> Format r r
forall r. Builder -> Format r r
now Builder
suf
squoted :: Format r a -> Format r a
squoted :: Format r a -> Format r a
squoted = Builder -> Format r a -> Format r a
forall r a. Builder -> Format r a -> Format r a
surrounded "'"
dquoted :: Format r a -> Format r a
dquoted :: Format r a -> Format r a
dquoted = Builder -> Format r a -> Format r a
forall r a. Builder -> Format r a -> Format r a
surrounded "\""
parenthesised :: Format r a -> Format r a
parenthesised :: Format r a -> Format r a
parenthesised = Builder -> Builder -> Format r a -> Format r a
forall r a. Builder -> Builder -> Format r a -> Format r a
enclosed "(" ")"
squared :: Format r a -> Format r a
squared :: Format r a -> Format r a
squared = Builder -> Builder -> Format r a -> Format r a
forall r a. Builder -> Builder -> Format r a -> Format r a
enclosed "[" "]"
braced :: Format r a -> Format r a
braced :: Format r a -> Format r a
braced = Builder -> Builder -> Format r a -> Format r a
forall r a. Builder -> Builder -> Format r a -> Format r a
enclosed "{" "}"
angled :: Format r a -> Format r a
angled :: Format r a -> Format r a
angled = Builder -> Builder -> Format r a -> Format r a
forall r a. Builder -> Builder -> Format r a -> Format r a
enclosed "<" ">"
backticked :: Format r a -> Format r a
backticked :: Format r a -> Format r a
backticked = Builder -> Format r a -> Format r a
forall r a. Builder -> Format r a -> Format r a
surrounded "`"
indented :: Int -> Format r a -> Format r a
indented :: Int -> Format r a -> Format r a
indented n :: Int
n = Builder -> Format r a -> Format r a
forall r a. Builder -> Format r a -> Format r a
prefixed Builder
spaces
where
spaces :: Builder
spaces = Int64 -> Text -> Text
TL.replicate (Int -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n) (Char -> Text
TL.singleton ' ') Text -> (Text -> Builder) -> Builder
forall a b. a -> (a -> b) -> b
& Text -> Builder
TLB.fromLazyText
indentedLines :: Foldable t => Int -> Format Builder (a -> Builder) -> Format r (t a -> r)
indentedLines :: Int -> Format Builder (a -> Builder) -> Format r (t a -> r)
indentedLines n :: Int
n = Format Builder (a -> Builder) -> Format r (t a -> r)
forall (t :: * -> *) a r.
Foldable t =>
Format Builder (a -> Builder) -> Format r (t a -> r)
unlined (Format Builder (a -> Builder) -> Format r (t a -> r))
-> (Format Builder (a -> Builder) -> Format Builder (a -> Builder))
-> Format Builder (a -> Builder)
-> Format r (t a -> r)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int
-> Format Builder (a -> Builder) -> Format Builder (a -> Builder)
forall r a. Int -> Format r a -> Format r a
indented Int
n
reindented :: Int -> Format r a -> Format r a
reindented :: Int -> Format r a -> Format r a
reindented n :: Int
n = (Format Builder (Builder -> Builder)
-> Format Builder ([Builder] -> Builder))
-> Format r a -> Format r a
forall r a.
(Format Builder (Builder -> Builder)
-> Format Builder ([Builder] -> Builder))
-> Format r a -> Format r a
lined (Int
-> Format Builder (Builder -> Builder)
-> Format Builder ([Builder] -> Builder)
forall (t :: * -> *) a r.
Foldable t =>
Int -> Format Builder (a -> Builder) -> Format r (t a -> r)
indentedLines Int
n)
roundedTo :: (Integral i, RealFrac d, Functor f) => f (i -> r) -> f (d -> r)
roundedTo :: f (i -> r) -> f (d -> r)
roundedTo = ((i -> r) -> d -> r) -> f (i -> r) -> f (d -> r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((i -> r) -> (d -> i) -> d -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. d -> i
forall a b. (RealFrac a, Integral b) => a -> b
round)
truncatedTo :: (Integral i, RealFrac d, Functor f) => f (i -> r) -> f (d -> r)
truncatedTo :: f (i -> r) -> f (d -> r)
truncatedTo = ((i -> r) -> d -> r) -> f (i -> r) -> f (d -> r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((i -> r) -> (d -> i) -> d -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. d -> i
forall a b. (RealFrac a, Integral b) => a -> b
truncate)
ceilingedTo :: (Integral i, RealFrac d, Functor f) => f (i -> r) -> f (d -> r)
ceilingedTo :: f (i -> r) -> f (d -> r)
ceilingedTo = ((i -> r) -> d -> r) -> f (i -> r) -> f (d -> r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((i -> r) -> (d -> i) -> d -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. d -> i
forall a b. (RealFrac a, Integral b) => a -> b
ceiling)
flooredTo :: (Integral i, RealFrac d, Functor f) => f (i -> r) -> f (d -> r)
flooredTo :: f (i -> r) -> f (d -> r)
flooredTo = ((i -> r) -> d -> r) -> f (i -> r) -> f (d -> r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((i -> r) -> (d -> i) -> d -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. d -> i
forall a b. (RealFrac a, Integral b) => a -> b
floor)
viewed :: ((a -> Const a b) -> s -> Const a t) -> Format r (a -> r) -> Format r (s -> r)
viewed :: ((a -> Const a b) -> s -> Const a t)
-> Format r (a -> r) -> Format r (s -> r)
viewed l :: (a -> Const a b) -> s -> Const a t
l = ((a -> r) -> s -> r) -> Format r (a -> r) -> Format r (s -> r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((a -> r) -> (s -> a) -> s -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Const a t -> a
forall a k (b :: k). Const a b -> a
getConst (Const a t -> a) -> (s -> Const a t) -> s -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> Const a b) -> s -> Const a t
l a -> Const a b
forall k a (b :: k). a -> Const a b
Const))
accessed :: (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed :: (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed accessor :: s -> a
accessor = ((a -> r) -> s -> r) -> Format r (a -> r) -> Format r (s -> r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((a -> r) -> (s -> a) -> s -> r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> a
accessor)
binPrefix :: Integral a => Int64 -> Format r (a -> r)
binPrefix :: Int64 -> Format r (a -> r)
binPrefix n :: Int64
n = "0b" Format (a -> r) (a -> r) -> Format r (a -> r) -> Format r (a -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
forall r a. Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
lpadded Int64
n '0' Format r (a -> r)
forall a r. Integral a => Format r (a -> r)
bin
octPrefix :: Integral a => Int64 -> Format r (a -> r)
octPrefix :: Int64 -> Format r (a -> r)
octPrefix n :: Int64
n = "0o" Format (a -> r) (a -> r) -> Format r (a -> r) -> Format r (a -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
forall r a. Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
lpadded Int64
n '0' Format r (a -> r)
forall a r. Integral a => Format r (a -> r)
oct
hexPrefix :: Integral a => Int64 -> Format r (a -> r)
hexPrefix :: Int64 -> Format r (a -> r)
hexPrefix n :: Int64
n = "0x" Format (a -> r) (a -> r) -> Format r (a -> r) -> Format r (a -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
forall r a. Int64 -> Char -> Format r (a -> r) -> Format r (a -> r)
lpadded Int64
n '0' Format r (a -> r)
forall a r. Integral a => Format r (a -> r)
hex