-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A new formatting library -- -- A new formatting library that tries to be simple to understand while -- still being powerful and providing more convenience features than -- other libraries (like functions for pretty-printing maps and lists, or -- a function for printing arbitrary datatypes using generics). -- -- A comparison with other libraries: -- --
-- >>> hexF 3635
-- "e33"
--
-- >>> hexF ("\0\50\63\80" :: BS.ByteString)
-- "00323f50"
--
hexF :: FormatAsHex a => a -> Builder
class FormatAsBase64 a
-- | Convert a bytestring to base64:
--
--
-- >>> base64F ("\0\50\63\80" :: BS.ByteString)
-- "ADI/UA=="
--
base64F :: FormatAsBase64 a => a -> Builder
-- | Convert a bytestring to base64url (a variant of base64 which omits
-- / and thus can be used in URLs):
--
--
-- >>> base64UrlF ("\0\50\63\80" :: BS.ByteString)
-- "ADI_UA=="
--
base64UrlF :: FormatAsBase64 a => a -> Builder
class TupleF a
-- | Format a tuple (of up to 8 elements):
--
-- -- >>> tupleF (1,2,"hi") -- "(1, 2, hi)" ---- -- If any of the elements takes several lines, an alternate format is -- used: -- --
-- >>> fmt $ tupleF ("test","foo\nbar","more test")
-- ( test
-- ,
-- foo
-- bar
-- ,
-- more test )
--
tupleF :: TupleF a => a -> Builder
class GBuildable f
gbuild :: GBuildable f => f a -> Builder
class GetFields f
-- | Get fields, together with their names if available
getFields :: GetFields f => f a -> [(String, Builder)]
-- | A more powerful Buildable used for genericF. Can build
-- functions, tuples, lists, maps, etc., as well as combinations thereof.
class Buildable' a
build' :: Buildable' a => a -> Builder
-- | Something like PrintfType in Text.Printf.
class FormatType r
format' :: FormatType r => Format -> [Builder] -> r
groupInt :: (Buildable a, Integral a) => Int -> Char -> a -> Builder
atBase :: Integral a => Int -> a -> String
showSigned' :: Real a => (a -> ShowS) -> a -> ShowS
intToDigit' :: Int -> Char
-- | Add a prefix to the first line, and indent all lines but the first
-- one.
--
-- The output will always end with a newline, even when the input
-- doesn't.
indent' :: Int -> Text -> Builder -> Builder
-- | Format a floating-point number without scientific notation:
--
-- -- >>> listF' (fixedF 5) [pi,0.1,10] -- "[3.14159, 0.10000, 10.00000]" --fixedF :: Real a => Int -> a -> Builder -- | Add an ordinal suffix to a number: -- --
-- >>> ordinalF 15 -- "15th" -- -- >>> ordinalF 22 -- "22nd" --ordinalF :: (Buildable a, Integral a) => a -> Builder instance Fmt.Internal.FromBuilder Data.Text.Internal.Builder.Builder instance a ~ GHC.Types.Char => Fmt.Internal.FromBuilder [a] instance Fmt.Internal.FromBuilder Data.Text.Internal.Text instance Fmt.Internal.FromBuilder Data.Text.Internal.Lazy.Text instance a ~ () => Fmt.Internal.FromBuilder (GHC.Types.IO a) instance Fmt.Internal.FormatAsHex Data.ByteString.Internal.ByteString instance Fmt.Internal.FormatAsHex Data.ByteString.Lazy.Internal.ByteString instance GHC.Real.Integral a => Fmt.Internal.FormatAsHex a instance Fmt.Internal.FormatAsBase64 Data.ByteString.Internal.ByteString instance Fmt.Internal.FormatAsBase64 Data.ByteString.Lazy.Internal.ByteString instance (Data.Text.Buildable.Buildable a, Fmt.Internal.FormatType r) => Fmt.Internal.FormatType (a -> r) instance Fmt.Internal.FromBuilder r => Fmt.Internal.FormatType r -- | Formatters for various time types. This module copies the structure of -- Formatting.Time from the formatting -- package. -- -- Most of the time you'll want to use one of these formatters: -- --
-- >>> dateTimeF t -- full date and time -- "Sun May 14 16:16:47 MSK 2017" -- -- >>> hmF t -- hours and minutes -- "16:16" -- -- >>> hmsF t -- hours, minutes and seconds -- "16:16:47" -- -- >>> dateDashF t -- date in ISO 8601 format -- "2017-05-14" -- -- >>> diffF False t -- time period (convenient for humans) -- "3 seconds" -- -- >>> diffF True t -- point in time (convenient for humans) -- "3 seconds ago" ---- -- Note that two formatters from Formatting.Time have been -- renamed: -- --
-- pico -> picosecondF -- decimals -> subsecondF --module Fmt.Time -- | Format time with an arbitrary formatting string. Other formatters in -- this module are implemented using timeF. timeF :: FormatTime a => Text -> a -> Builder -- | Timezone offset on the format -HHMM. -- --
-- >>> t <- getZonedTime -- -- >>> t -- 2017-05-14 16:16:47.62135 MSK -- -- >>> tzF t -- "+0300" --tzF :: FormatTime a => a -> Builder -- | Timezone name. -- --
-- >>> tzNameF t -- "MSK" --tzNameF :: FormatTime a => a -> Builder -- | As dateTimeFmt locale (e.g. %a %b %e %H:%M:%S %Z -- %Y). -- --
-- >>> dateTimeF t -- "Sun May 14 16:16:47 MSK 2017" --dateTimeF :: FormatTime a => a -> Builder -- | Same as %H:%M. -- --
-- >>> hmF t -- "16:16" --hmF :: FormatTime a => a -> Builder -- | Same as %H:%M:%S. -- --
-- >>> hmsF t -- "16:16:47" --hmsF :: FormatTime a => a -> Builder -- | As timeFmt locale (e.g. %H:%M:%S). -- --
-- >>> hmsLF t -- "16:16:47" --hmsLF :: FormatTime a => a -> Builder -- | As time12Fmt locale (e.g. %I:%M:%S %p). -- --
-- >>> hmsPLF t -- "04:16:47 PM" --hmsPLF :: FormatTime a => a -> Builder -- | Day half from (amPm locale), converted to lowercase, -- am, pm. -- --
-- >>> dayHalfF t -- "pm" --dayHalfF :: FormatTime a => a -> Builder -- | Day half from (amPm locale), AM, PM. -- --
-- >>> dayHalfUF t -- "PM" --dayHalfUF :: FormatTime a => a -> Builder -- | Hour, 24-hour, leading 0 as needed, 00 - 23. -- --
-- >>> hour24F t -- "16" -- -- >>> let nightT = read "2017-05-14 00:21:32.714083 UTC" :: UTCTime -- -- >>> nightT -- 2017-05-14 00:21:32.714083 UTC -- -- >>> hour24F nightT -- "00" --hour24F :: FormatTime a => a -> Builder -- | Hour, 12-hour, leading 0 as needed, 01 - 12. -- --
-- >>> hour12F t -- "04" -- -- >>> hour12F nightT -- "12" --hour12F :: FormatTime a => a -> Builder -- | Hour, 24-hour, leading space as needed, 0 - 23. -- --
-- >>> hour24SF nightT -- " 0" --hour24SF :: FormatTime a => a -> Builder -- | Hour, 12-hour, leading space as needed, 1 - 12. -- --
-- >>> hour12SF nightT -- "12" --hour12SF :: FormatTime a => a -> Builder -- | Minute, 00 - 59. -- --
-- >>> otherT -- 2017-05-14 17:12:47.897343 MSK -- -- >>> minuteF otherT -- "12" --minuteF :: FormatTime a => a -> Builder -- | Second, without decimal part, 00 - 60. -- --
-- >>> secondF t -- "47" --secondF :: FormatTime a => a -> Builder -- | Picosecond, including trailing zeros, 000000000000 - -- 999999999999. -- --
-- >>> picosecondF t -- "621350000000" --picosecondF :: FormatTime a => a -> Builder -- | Decimal point of the second. Up to 12 digits, without trailing zeros. -- For a whole number of seconds, this produces an empty string. -- --
-- >>> subsecondF t -- ".62135" --subsecondF :: FormatTime a => a -> Builder -- | Number of whole seconds since the Unix epoch. For times before the -- Unix epoch, this is a negative number. Note that in %s.%q and -- %s%Q the decimals are positive, not negative. For example, -- 0.9 seconds before the Unix epoch is formatted as -1.1 with -- %s%Q. -- --
-- >>> epochF t -- "1494767807" --epochF :: FormatTime a => a -> Builder -- | Same as %m/%d/%y. -- --
-- >>> dateSlashF t -- "05/14/17" --dateSlashF :: FormatTime a => a -> Builder -- | Same as %Y-%m-%d. -- --
-- >>> dateDashF t -- "2017-05-14" --dateDashF :: FormatTime a => a -> Builder -- | As dateFmt locale (e.g. %m/%d/%y). -- --
-- >>> dateSlashLF t -- "05/14/17" --dateSlashLF :: FormatTime a => a -> Builder -- | Year. -- --
-- >>> yearF t -- "2017" --yearF :: FormatTime a => a -> Builder -- | Last two digits of year, 00 - 99. -- --
-- >>> yyF t -- "17" --yyF :: FormatTime a => a -> Builder -- | Century (being the first two digits of the year), 00 - -- 99. -- --
-- >>> centuryF t -- "20" --centuryF :: FormatTime a => a -> Builder -- | Month name, long form (fst from months locale), -- January - December. -- --
-- >>> let longMonthT = read "2017-01-12 00:21:32.714083 UTC" :: UTCTime -- -- >>> monthNameF longMonthT -- "January" --monthNameF :: FormatTime a => a -> Builder -- | Month name, short form (snd from months -- locale), Jan - Dec. -- --
-- >>> monthNameShortF longMonthT -- "Jan" --monthNameShortF :: FormatTime a => a -> Builder -- | Month of year, leading 0 as needed, 01 - 12. -- --
-- >>> monthF longMonthT -- "01" --monthF :: FormatTime a => a -> Builder -- | Day of month, leading 0 as needed, 01 - 31. -- --
-- >>> dayOfMonthF t -- "14" --dayOfMonthF :: FormatTime a => a -> Builder -- | Day of month, 1st, 2nd, 25th, etc. -- --
-- >>> dayOfMonthOrdF t -- "14th" --dayOfMonthOrdF :: FormatTime a => a -> Builder -- | Day of month, leading space as needed, 1 - 31. dayOfMonthSF :: FormatTime a => a -> Builder -- | Day of year for Ordinal Date format, 001 - 366. -- --
-- >>> dayF t -- "134" --dayF :: FormatTime a => a -> Builder -- | Year for Week Date format e.g. 2013. -- --
-- >>> weekYearF t -- "2017" --weekYearF :: FormatTime a => a -> Builder -- | Last two digits of year for Week Date format, 00 - -- 99. -- --
-- >>> weekYYF t -- "17" --weekYYF :: FormatTime a => a -> Builder -- | Century (first two digits of year) for Week Date format, 00 - -- 99. -- --
-- >>> weekCenturyF t -- "20" --weekCenturyF :: FormatTime a => a -> Builder -- | Week for Week Date format, 01 - 53. -- --
-- >>> weekF t -- "19" --weekF :: FormatTime a => a -> Builder -- | Day for Week Date format, 1 - 7. -- --
-- >>> dayOfWeekF t -- "7" --dayOfWeekF :: FormatTime a => a -> Builder -- | Day of week, short form (snd from wDays -- locale), Sun - Sat. -- --
-- >>> dayNameShortF t -- "Sun" --dayNameShortF :: FormatTime a => a -> Builder -- | Day of week, long form (fst from wDays locale), -- Sunday - Saturday. -- --
-- >>> dayNameF t -- "Sunday" --dayNameF :: FormatTime a => a -> Builder -- | Week number of year, where weeks start on Sunday (as -- sundayStartWeek), 00 - 53. -- --
-- >>> weekFromZeroF t -- "20" --weekFromZeroF :: FormatTime a => a -> Builder -- | Day of week number, 0 (= Sunday) - 6 (= Saturday). -- --
-- >>> dayOfWeekFromZeroF t -- "0" --dayOfWeekFromZeroF :: FormatTime a => a -> Builder -- | Week number of year, where weeks start on Monday (as -- mondayStartWeek), 00 - 53. -- --
-- >>> weekOfYearMonF t -- "19" --weekOfYearMonF :: FormatTime a => a -> Builder -- | Display a time span as one time relative to another. Input is assumed -- to be seconds. Typical inputs are NominalDiffTime and -- DiffTime. -- --
-- >>> diffF False 100 -- "a minute" -- -- >>> diffF True 100 -- "in a minute" --diffF :: forall n. RealFrac n => Bool -> n -> Builder -- | Display the absolute value time span in years. -- --
-- >>> epochF t -- "1494767807" -- -- >>> yearsF 3 1494767807 -- "47.399" --yearsF :: RealFrac n => Int -> n -> Builder -- | Display the absolute value time span in days. -- --
-- >>> daysF 3 1494767807 -- "17300.553" --daysF :: RealFrac n => Int -> n -> Builder -- | Display the absolute value time span in hours. -- --
-- >>> hoursF 3 3600 -- "1.000" --hoursF :: RealFrac n => Int -> n -> Builder -- | Display the absolute value time span in minutes. -- --
-- >>> minutesF 3 150 -- "2.500" --minutesF :: RealFrac n => Int -> n -> Builder -- | Display the absolute value time span in seconds. -- --
-- >>> secondsF 3 100 -- "100.000" --secondsF :: RealFrac n => Int -> n -> Builder module Fmt -- | Concatenate, then convert (+|) :: (FromBuilder b) => Builder -> Builder -> b infixr 1 +| -- | build and concatenate, then convert (|+) :: (Buildable a, FromBuilder b) => a -> Builder -> b infixr 1 |+ -- | Concatenate, then convert (+||) :: (FromBuilder b) => Builder -> Builder -> b infixr 1 +|| -- | show and concatenate, then convert (||+) :: (Show a, FromBuilder b) => a -> Builder -> b infixr 1 ||+ (|++|) :: (Buildable a, FromBuilder b) => a -> Builder -> b infixr 1 |++| (||++||) :: (Show a, FromBuilder b) => a -> Builder -> b infixr 1 ||++|| (|++||) :: (Show a, FromBuilder b) => a -> Builder -> b infixr 1 |++|| (||++|) :: (Buildable a, FromBuilder b) => a -> Builder -> b infixr 1 ||++| -- | An old-style formatting function taken from text-format (see -- Data.Text.Format). Unlike format from -- Data.Text.Format, it can produce String and strict -- Text as well (and print to console too). Also it's -- polyvariadic: -- --
-- >>> format "{} + {} = {}" 2 2 4
-- "2 + 2 = 4"
--
--
-- You can use arbitrary formatters:
--
--
-- >>> format "0x{} + 0x{} = 0x{}" (hexF 130) (hexF 270) (hexF (130+270))
-- "0x82 + 0x10e = 0x190"
--
format :: FormatType r => Format -> r
-- | Like format, but adds a newline.
formatLn :: FormatType r => Format -> r
-- | A format string. This is intentionally incompatible with other string
-- types, to make it difficult to construct a format string by
-- concatenating string fragments (a very common way to accidentally make
-- code vulnerable to malicious data).
--
-- This type is an instance of IsString, so the easiest way to
-- construct a query is to enable the OverloadedStrings language
-- extension and then simply write the query in double quotes.
--
--
-- {-# LANGUAGE OverloadedStrings #-}
--
-- import Data.Text.Format
--
-- f :: Format
-- f = "hello {}"
--
--
-- The underlying type is Text, so literal Haskell strings that
-- contain Unicode characters will be correctly handled.
data Format :: *
-- | fmt converts things to String, Text or
-- Builder.
--
-- Most of the time you won't need it, as strings produced with
-- (+|) and (|+) can already be used as String,
-- Text, etc. However, combinators like listF can only
-- produce Builder (for better type inference), and you need to
-- use fmt on them.
--
-- Also, fmt can do printing:
--
-- -- >>> fmt "Hello world!\n" -- Hello world! --fmt :: FromBuilder b => Builder -> b -- | Like fmt, but appends a newline. fmtLn :: FromBuilder b => Builder -> b -- | A Builder is an efficient way to build lazy Text -- values. There are several functions for constructing builders, but -- only one to inspect them: to extract any data, you have to turn them -- into lazy Text values using toLazyText. -- -- Internally, a builder constructs a lazy Text by filling -- arrays piece by piece. As each buffer is filled, it is 'popped' off, -- to become a new chunk of the resulting lazy Text. All this is -- hidden from the user of the Builder. data Builder :: * -- | The class of types that can be rendered to a Builder. class Buildable p build :: Buildable p => p -> Builder -- | Indent already formatted text. -- --
-- >>> fmt $ "This is a list:\n" <> indent 4 (blockListF [1,2,3]) -- This is a list: -- - 1 -- - 2 -- - 3 ---- -- The output will always end with a newline, even when the input -- doesn't. indent :: Int -> Builder -> Builder -- | Add a prefix to the first line, and indent all lines but the first -- one. -- -- The output will always end with a newline, even when the input -- doesn't. indent' :: Int -> Text -> Builder -> Builder -- | Attach a name to anything: -- --
-- >>> fmt $ nameF "clients" $ blockListF ["Alice", "Bob", "Zalgo"] -- clients: -- - Alice -- - Bob -- - Zalgo --nameF :: Builder -> Builder -> Builder -- | A simple comma-separated list formatter. -- --
-- >>> listF ["hello", "world"] -- "[hello, world]" ---- -- For multiline output, use jsonListF. listF :: (Foldable f, Buildable a) => f a -> Builder -- | A version of listF that lets you supply your own building -- function for list elements. -- -- For instance, to format a list of lists you'd have to do this (since -- there's no Buildable instance for lists): -- --
-- >>> listF' listF [[1,2,3],[4,5,6]] -- "[[1, 2, 3], [4, 5, 6]]" --listF' :: (Foldable f) => (a -> Builder) -> f a -> Builder -- | A multiline formatter for lists. -- --
-- >>> fmt $ blockListF [1,2,3] -- - 1 -- - 2 -- - 3 ---- -- It automatically handles multiline list elements: -- --
-- >>> fmt $ blockListF ["hello\nworld", "foo\nbar\nquix"] -- - hello -- world -- -- - foo -- bar -- quix --blockListF :: forall f a. (Foldable f, Buildable a) => f a -> Builder -- | A version of blockListF that lets you supply your own building -- function for list elements. blockListF' :: forall f a. (Foldable f) => (a -> Builder) -> f a -> Builder -- | A JSON-style formatter for lists. -- --
-- >>> fmt $ jsonListF [1,2,3] -- [ -- 1 -- , 2 -- , 3 -- ] ---- -- Like blockListF, it handles multiline elements well: -- --
-- >>> fmt $ jsonListF ["hello\nworld", "foo\nbar\nquix"] -- [ -- hello -- world -- , foo -- bar -- quix -- ] ---- -- (Note that, unlike blockListF, it doesn't add blank lines in -- such cases.) jsonListF :: forall f a. (Foldable f, Buildable a) => f a -> Builder -- | A version of jsonListF that lets you supply your own building -- function for list elements. jsonListF' :: forall f a. (Foldable f) => (a -> Builder) -> f a -> Builder -- | A simple JSON-like map formatter; works for Map, HashMap, etc, as well -- as ordinary lists of pairs. -- --
-- >>> mapF [("a", 1), ("b", 4)]
-- "{a: 1, b: 4}"
--
--
-- For multiline output, use jsonMapF.
mapF :: (IsList t, Item t ~ (k, v), Buildable k, Buildable v) => t -> Builder
-- | A version of mapF that lets you supply your own building
-- function for keys and values.
mapF' :: (IsList t, Item t ~ (k, v)) => (k -> Builder) -> (v -> Builder) -> t -> Builder
-- | A YAML-like map formatter:
--
--
-- >>> fmt $ blockMapF [("Odds", blockListF [1,3]), ("Evens", blockListF [2,4])]
-- Odds:
-- - 1
-- - 3
-- Evens:
-- - 2
-- - 4
--
blockMapF :: (IsList t, Item t ~ (k, v), Buildable k, Buildable v) => t -> Builder
-- | A version of blockMapF that lets you supply your own building
-- function for keys and values.
blockMapF' :: (IsList t, Item t ~ (k, v)) => (k -> Builder) -> (v -> Builder) -> t -> Builder
-- | A JSON-like map formatter (unlike mapF, always multiline):
--
--
-- >>> fmt $ jsonMapF [("Odds", jsonListF [1,3]), ("Evens", jsonListF [2,4])]
-- {
-- Odds:
-- [
-- 1
-- , 3
-- ]
-- , Evens:
-- [
-- 2
-- , 4
-- ]
-- }
--
jsonMapF :: (IsList t, Item t ~ (k, v), Buildable k, Buildable v) => t -> Builder
-- | A version of jsonMapF that lets you supply your own building
-- function for keys and values.
jsonMapF' :: forall t k v. (IsList t, Item t ~ (k, v)) => (k -> Builder) -> (v -> Builder) -> t -> Builder
-- | Format a tuple (of up to 8 elements):
--
-- -- >>> tupleF (1,2,"hi") -- "(1, 2, hi)" ---- -- If any of the elements takes several lines, an alternate format is -- used: -- --
-- >>> fmt $ tupleF ("test","foo\nbar","more test")
-- ( test
-- ,
-- foo
-- bar
-- ,
-- more test )
--
tupleF :: TupleF a => a -> Builder
-- | Format a list like a tuple. (This function is used to define
-- tupleF.)
tupleLikeF :: [Builder] -> Builder
-- | Like build for Maybe, but displays Nothing as
-- <Nothing> instead of an empty string.
--
-- build:
--
-- -- >>> build (Nothing :: Maybe Int) -- "" -- -- >>> build (Just 1 :: Maybe Int) -- "1" ---- -- maybeF: -- --
-- >>> maybeF (Nothing :: Maybe Int) -- "<Nothing>" -- -- >>> maybeF (Just 1 :: Maybe Int) -- "1" --maybeF :: Buildable a => Maybe a -> Builder -- | Format an Either: -- --
-- >>> eitherF (Right 1) -- "<Right: 1>" --eitherF :: (Buildable a, Buildable b) => Either a b -> Builder -- | Take the first N characters: -- --
-- >>> prefixF 3 "hello" -- "hel" --prefixF :: Buildable a => Int -> a -> Builder -- | Take the last N characters: -- --
-- >>> suffixF 3 "hello" -- "llo" --suffixF :: Buildable a => Int -> a -> Builder -- | padLeftF n c pads the string with character c from -- the left side until it becomes n characters wide (and does -- nothing if the string is already that long, or longer): -- --
-- >>> padLeftF 5 '0' 12 -- "00012" -- -- >>> padLeftF 5 '0' 123456 -- "123456" --padLeftF :: Buildable a => Int -> Char -> a -> Builder -- | padRightF n c pads the string with character c from -- the right side until it becomes n characters wide (and does -- nothing if the string is already that long, or longer): -- --
-- >>> padRightF 5 ' ' "foo" -- "foo " -- -- >>> padRightF 5 ' ' "foobar" -- "foobar" --padRightF :: Buildable a => Int -> Char -> a -> Builder -- | padBothF n c pads the string with character c from -- both sides until it becomes n characters wide (and does -- nothing if the string is already that long, or longer): -- --
-- >>> padBothF 5 '=' "foo" -- "=foo=" -- -- >>> padBothF 5 '=' "foobar" -- "foobar" ---- -- When padding can't be distributed equally, the left side is preferred: -- --
-- >>> padBoth 8 '=' "foo" -- "===foo==" --padBothF :: Buildable a => Int -> Char -> a -> Builder -- | Format a number or bytestring as hex: -- --
-- >>> hexF 3635
-- "e33"
--
-- >>> hexF ("\0\50\63\80" :: BS.ByteString)
-- "00323f50"
--
hexF :: FormatAsHex a => a -> Builder
-- | Convert a bytestring to base64:
--
--
-- >>> base64F ("\0\50\63\80" :: BS.ByteString)
-- "ADI/UA=="
--
base64F :: FormatAsBase64 a => a -> Builder
-- | Convert a bytestring to base64url (a variant of base64 which omits
-- / and thus can be used in URLs):
--
--
-- >>> base64UrlF ("\0\50\63\80" :: BS.ByteString)
-- "ADI_UA=="
--
base64UrlF :: FormatAsBase64 a => a -> Builder
-- | Add an ordinal suffix to a number:
--
-- -- >>> ordinalF 15 -- "15th" -- -- >>> ordinalF 22 -- "22nd" --ordinalF :: (Buildable a, Integral a) => a -> Builder -- | Break digits in a number: -- --
-- >>> commaizeF 15830000 -- "15,830,000" --commaizeF :: (Buildable a, Integral a) => a -> Builder -- | Format a number as octal: -- --
-- >>> listF' octF [7,8,9,10] -- "[7, 10, 11, 12]" --octF :: Integral a => a -> Builder -- | Format a number as binary: -- --
-- >>> listF' binF [7,8,9,10] -- "[111, 1000, 1001, 1010]" --binF :: Integral a => a -> Builder -- | Format a number in arbitrary base (up to 36): -- --
-- >>> baseF 3 10000 -- "111201101" -- -- >>> baseF 7 10000 -- "41104" -- -- >>> baseF 36 10000 -- "7ps" --baseF :: Integral a => Int -> a -> Builder -- | Format a floating-point number: -- --
-- >>> floatF 3.1415 -- "3.1415" ---- -- Numbers bigger than 1e21 or smaller than 1e-6 will be displayed using -- scientific notation: -- --
-- >>> listF' floatF [1e-6,9e-7] -- "[0.000001, 9e-7]" -- -- >>> listF' floatF [9e20,1e21] -- "[900000000000000000000, 1e21]" --floatF :: Real a => a -> Builder -- | Format a floating-point number using scientific notation, with given -- amount of precision: -- --
-- >>> listF' (exptF 5) [pi,0.1,10] -- "[3.14159e0, 1.00000e-1, 1.00000e1]" --exptF :: Real a => Int -> a -> Builder -- | Format a floating-point number with given amount of precision. -- -- For small numbers, it uses scientific notation for everything smaller -- than 1e-6: -- --
-- >>> listF' (precF 3) [1e-5,1e-6,1e-7] -- "[0.0000100, 0.00000100, 1.00e-7]" ---- -- For large numbers, it uses scientific notation for everything larger -- than 1eN, where N is the precision: -- --
-- >>> listF' (precF 4) [1e3,5e3,1e4] -- "[1000, 5000, 1.000e4]" --precF :: Real a => Int -> a -> Builder -- | Format a floating-point number without scientific notation: -- --
-- >>> listF' (fixedF 5) [pi,0.1,10] -- "[3.14159, 0.10000, 10.00000]" --fixedF :: Real a => Int -> a -> Builder -- | Display something only if the condition is True (empty string -- otherwise). -- --
-- >>> "Hello!" <> whenF showDetails (", details: "+|foobar|+"")
--
--
-- Note that it can only take a Builder (because otherwise it
-- would be unusable with (+|)-formatted strings which can resolve
-- to any FromBuilder). Thus, use fmt if you need just one
-- value:
--
-- -- >>> "Maybe here's a number: "+|whenF cond (fmt n)|+"" --whenF :: Bool -> Builder -> Builder -- | Display something only if the condition is False (empty string -- otherwise). unlessF :: Bool -> Builder -> Builder -- | Format an arbitrary value without requiring a Buildable -- instance: -- --
-- data Foo = Foo { x :: Bool, y :: [Int] }
-- deriving Generic
--
--
-- -- >>> fmt (genericF (Foo True [1,2,3])) -- Foo: -- x: True -- y: [1, 2, 3] ---- -- It works for non-record constructors too: -- --
-- data Bar = Bar Bool [Int] -- deriving Generic ---- --
-- >>> fmtLn (genericF (Bar True [1,2,3])) -- <Bar: True, [1, 2, 3]> ---- -- Any fields inside the type must either be Buildable or one of -- the following types: -- -- -- -- The exact format of genericF might change in future versions, -- so don't rely on it. It's merely a convenience function. genericF :: (Generic a, GBuildable (Rep a)) => a -> Builder instance (Data.Text.Buildable.Buildable a1, Data.Text.Buildable.Buildable a2) => Fmt.Internal.TupleF (a1, a2) instance (Data.Text.Buildable.Buildable a1, Data.Text.Buildable.Buildable a2, Data.Text.Buildable.Buildable a3) => Fmt.Internal.TupleF (a1, a2, a3) instance (Data.Text.Buildable.Buildable a1, Data.Text.Buildable.Buildable a2, Data.Text.Buildable.Buildable a3, Data.Text.Buildable.Buildable a4) => Fmt.Internal.TupleF (a1, a2, a3, a4) instance (Data.Text.Buildable.Buildable a1, Data.Text.Buildable.Buildable a2, Data.Text.Buildable.Buildable a3, Data.Text.Buildable.Buildable a4, Data.Text.Buildable.Buildable a5) => Fmt.Internal.TupleF (a1, a2, a3, a4, a5) instance (Data.Text.Buildable.Buildable a1, Data.Text.Buildable.Buildable a2, Data.Text.Buildable.Buildable a3, Data.Text.Buildable.Buildable a4, Data.Text.Buildable.Buildable a5, Data.Text.Buildable.Buildable a6) => Fmt.Internal.TupleF (a1, a2, a3, a4, a5, a6) instance (Data.Text.Buildable.Buildable a1, Data.Text.Buildable.Buildable a2, Data.Text.Buildable.Buildable a3, Data.Text.Buildable.Buildable a4, Data.Text.Buildable.Buildable a5, Data.Text.Buildable.Buildable a6, Data.Text.Buildable.Buildable a7) => Fmt.Internal.TupleF (a1, a2, a3, a4, a5, a6, a7) instance (Data.Text.Buildable.Buildable a1, Data.Text.Buildable.Buildable a2, Data.Text.Buildable.Buildable a3, Data.Text.Buildable.Buildable a4, Data.Text.Buildable.Buildable a5, Data.Text.Buildable.Buildable a6, Data.Text.Buildable.Buildable a7, Data.Text.Buildable.Buildable a8) => Fmt.Internal.TupleF (a1, a2, a3, a4, a5, a6, a7, a8) instance Fmt.Internal.GBuildable a => Fmt.Internal.GBuildable (GHC.Generics.M1 GHC.Generics.D d a) instance (Fmt.Internal.GetFields a, GHC.Generics.Constructor c) => Fmt.Internal.GBuildable (GHC.Generics.M1 GHC.Generics.C c a) instance Fmt.Internal.Buildable' c => Fmt.Internal.GBuildable (GHC.Generics.K1 i c) instance (Fmt.Internal.GBuildable a, Fmt.Internal.GBuildable b) => Fmt.Internal.GBuildable (a GHC.Generics.:+: b) instance (Fmt.Internal.GetFields a, Fmt.Internal.GetFields b) => Fmt.Internal.GetFields (a GHC.Generics.:*: b) instance (Fmt.Internal.GBuildable a, GHC.Generics.Selector c) => Fmt.Internal.GetFields (GHC.Generics.M1 GHC.Generics.S c a) instance Fmt.Internal.GBuildable a => Fmt.Internal.GetFields (GHC.Generics.M1 GHC.Generics.D c a) instance Fmt.Internal.GBuildable a => Fmt.Internal.GetFields (GHC.Generics.M1 GHC.Generics.C c a) instance Fmt.Internal.GetFields GHC.Generics.U1 instance Fmt.Internal.Buildable' () instance (Fmt.Internal.Buildable' a1, Fmt.Internal.Buildable' a2) => Fmt.Internal.Buildable' (a1, a2) instance (Fmt.Internal.Buildable' a1, Fmt.Internal.Buildable' a2, Fmt.Internal.Buildable' a3) => Fmt.Internal.Buildable' (a1, a2, a3) instance (Fmt.Internal.Buildable' a1, Fmt.Internal.Buildable' a2, Fmt.Internal.Buildable' a3, Fmt.Internal.Buildable' a4) => Fmt.Internal.Buildable' (a1, a2, a3, a4) instance (Fmt.Internal.Buildable' a1, Fmt.Internal.Buildable' a2, Fmt.Internal.Buildable' a3, Fmt.Internal.Buildable' a4, Fmt.Internal.Buildable' a5) => Fmt.Internal.Buildable' (a1, a2, a3, a4, a5) instance (Fmt.Internal.Buildable' a1, Fmt.Internal.Buildable' a2, Fmt.Internal.Buildable' a3, Fmt.Internal.Buildable' a4, Fmt.Internal.Buildable' a5, Fmt.Internal.Buildable' a6) => Fmt.Internal.Buildable' (a1, a2, a3, a4, a5, a6) instance (Fmt.Internal.Buildable' a1, Fmt.Internal.Buildable' a2, Fmt.Internal.Buildable' a3, Fmt.Internal.Buildable' a4, Fmt.Internal.Buildable' a5, Fmt.Internal.Buildable' a6, Fmt.Internal.Buildable' a7) => Fmt.Internal.Buildable' (a1, a2, a3, a4, a5, a6, a7) instance (Fmt.Internal.Buildable' a1, Fmt.Internal.Buildable' a2, Fmt.Internal.Buildable' a3, Fmt.Internal.Buildable' a4, Fmt.Internal.Buildable' a5, Fmt.Internal.Buildable' a6, Fmt.Internal.Buildable' a7, Fmt.Internal.Buildable' a8) => Fmt.Internal.Buildable' (a1, a2, a3, a4, a5, a6, a7, a8) instance Fmt.Internal.Buildable' [GHC.Types.Char] instance Fmt.Internal.Buildable' a => Fmt.Internal.Buildable' [a] instance Fmt.Internal.Buildable' a => Fmt.Internal.Buildable' (Data.List.NonEmpty.NonEmpty a) instance Fmt.Internal.Buildable' a => Fmt.Internal.Buildable' (Data.Sequence.Seq a) instance (Fmt.Internal.Buildable' k, Fmt.Internal.Buildable' v) => Fmt.Internal.Buildable' (Data.Map.Base.Map k v) instance Fmt.Internal.Buildable' v => Fmt.Internal.Buildable' (Data.Set.Base.Set v) instance Fmt.Internal.Buildable' v => Fmt.Internal.Buildable' (Data.IntMap.Base.IntMap v) instance Fmt.Internal.Buildable' Data.IntSet.Base.IntSet instance Fmt.Internal.Buildable' a => Fmt.Internal.Buildable' (GHC.Base.Maybe a) instance (Fmt.Internal.Buildable' a, Fmt.Internal.Buildable' b) => Fmt.Internal.Buildable' (Data.Either.Either a b) instance Fmt.Internal.Buildable' (a -> b) instance Data.Text.Buildable.Buildable a => Fmt.Internal.Buildable' a