fτ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None%&9; Something like  in  Text.Printf.A more powerful  used for genericFS. Can build functions, tuples, lists, maps, etc., as well as combinations thereof. 2Get fields, together with their names if available %Format a tuple (of up to 8 elements):tupleF (1,2,"hi") "(1, 2, hi)"HIf any of the elements takes several lines, an alternate format is used: >>> ,fmt $ tupleF ("test","foo\nbar","more test")& ( test , foo bar , more test ) Convert a bytestring to base64:(base64F ("\0\50\63\80" :: BS.ByteString) "ADI/UA=="CConvert 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=="%Format a number or bytestring as hex: hexF 3635"e33"%hexF ("\0\50\63\80" :: BS.ByteString) "00323f50" Convert a  to something else.GAdd a prefix to the first line, and indent all lines but the first one.GThe output will always end with a newline, even when the input doesn't.;Format a floating-point number without scientific notation:listF' (fixedF 5) [pi,0.1,10]"[3.14159, 0.10000, 10.00000]""Add an ordinal suffix to a number: ordinalF 15"15th" ordinalF 22"22nd"$  !"#$%&'       !"#$%&'NoneT0(hFormat time with an arbitrary formatting string. Other formatters in this module are implemented using (.)Timezone offset on the format -HHMM.t <- getZonedTimet2017-05-14 16:16:47.62135 MSKtzF t"+0300"*Timezone name. tzNameF t"MSK"+As  locale (e.g. %a %b %e %H:%M:%S %Z %Y). dateTimeF t"Sun May 14 16:16:47 MSK 2017",Same as %H:%M.hmF t"16:16"-Same as %H:%M:%S.hmsF t "16:16:47".As  locale (e.g. %H:%M:%S).hmsLF t "16:16:47"/As  locale (e.g.  %I:%M:%S %p).hmsPLF t "04:16:47 PM"0Day half from ( locale), converted to lowercase, am, pm. dayHalfF t"pm"1Day half from ( locale), AM, PM. dayHalfUF t"PM"2$Hour, 24-hour, leading 0 as needed, 00 - 23. hour24F t"16"=let nightT = read "2017-05-14 00:21:32.714083 UTC" :: UTCTimenightT2017-05-14 00:21:32.714083 UTChour24F nightT"00"3$Hour, 12-hour, leading 0 as needed, 01 - 12. hour12F t"04"hour12F nightT"12"4(Hour, 24-hour, leading space as needed,  0 - 23.hour24SF nightT" 0"5(Hour, 12-hour, leading space as needed,  1 - 12.hour12SF nightT"12"6Minute, 00 - 59.otherT2017-05-14 17:12:47.897343 MSKminuteF otherT"12"7Second, without decimal part, 00 - 60. secondF t"47"8&Picosecond, including trailing zeros,  000000000000 -  999999999999. picosecondF t"621350000000"9Decimal 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":xNumber 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%Qk 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";Same as %m/%d/%y. dateSlashF t "05/14/17"<Same as %Y-%m-%d. dateDashF t "2017-05-14"=As  locale (e.g. %m/%d/%y). dateSlashLF t "05/14/17">Year.yearF t"2017"?Last two digits of year, 00 - 99.yyF t"17"@2Century (being the first two digits of the year), 00 - 99. centuryF t"20"AMonth name, long form ( from  locale), January - December.Alet longMonthT = read "2017-01-12 00:21:32.714083 UTC" :: UTCTimemonthNameF longMonthT "January"BMonth name, short form ( from  locale), Jan - Dec.monthNameShortF longMonthT"Jan"C$Month of year, leading 0 as needed, 01 - 12.monthF longMonthT"01"D#Day of month, leading 0 as needed, 01 - 31. dayOfMonthF t"14"EDay of month, 1st, 2nd, 25th, etc.dayOfMonthOrdF t"14th"F'Day of month, leading space as needed,  1 - 31.G%Day of year for Ordinal Date format, 001 - 366.dayF t"134"HYear for Week Date format e.g. 2013. weekYearF t"2017"I.Last two digits of year for Week Date format, 00 - 99. weekYYF t"17"J9Century (first two digits of year) for Week Date format, 00 - 99.weekCenturyF t"20"KWeek for Week Date format, 01 - 53.weekF t"19"LDay for Week Date format, 1 - 7. dayOfWeekF t"7"MDay of week, short form ( from  locale), Sun - Sat.dayNameShortF t"Sun"NDay of week, long form ( from  locale), Sunday - Saturday. dayNameF t"Sunday"O6Week number of year, where weeks start on Sunday (as sundayStartWeek), 00 - 53.weekFromZeroF t"20"PDay of week number, 0 (= Sunday) - 6 (= Saturday).dayOfWeekFromZeroF t"0"Q6Week number of year, where weeks start on Monday (as mondayStartWeek), 00 - 53.weekOfYearMonF t"19"RiDisplay a time span as one time relative to another. Input is assumed to be seconds. Typical inputs are  and .diffF False 100 "a minute"diffF True 100 "in a minute"S.Display the absolute value time span in years.epochF t "1494767807"yearsF 3 1494767807"47.399"T-Display the absolute value time span in days.daysF 3 1494767807 "17300.553"U.Display the absolute value time span in hours. hoursF 3 3600"1.000"V0Display the absolute value time span in minutes.minutesF 3 150"2.500"W0Display the absolute value time span in seconds.secondsF 3 100 "100.000"0()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRWhether to display the in/ago prefix or not Example:  3 seconds ago,  in 2 daysSDecimal places.TDecimal places.UDecimal places.VDecimal places.WDecimal places.0()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW0()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW0()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWNone 9:;DQRT*XConcatenate, then convertY and concatenate, then convertZConcatenate, then convert[ and concatenate, then convert`,An old-style formatting function taken from  text-format (see Data.Text.Format ). Unlike  from Data.Text.Format, it can produce  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:Bformat "0x{} + 0x{} = 0x{}" (hexF 130) (hexF 270) (hexF (130+270))"0x82 + 0x10e = 0x190"aLike `, but adds a newline.bb converts things to , Text or .>Most of the time you won't need it, as strings produced with (X) and (Y) can already be used as , Text!, etc. However, combinators like h can only produce 2 (for better type inference), and you need to use b on them.Also, b can do printing:fmt "Hello world!\n" Hello world!cLike b, but appends a newline.dIndent a block of text.;fmt $ "This is a list:\n" <> indentF 4 (blockListF [1,2,3])This is a list: - 1 - 2 - 3GThe output will always end with a newline, even when the input doesn't.eAttach a name to anything:<fmt $ nameF "clients" $ blockListF ["Alice", "Bob", "Zalgo"]clients: - Alice - Bob - ZalgofPut words between elements.!fmt $ unwordsF ["hello", "world"] hello world Of course, it works on anything :fmt $ unwordsF [1, 2]1 2g#Arrange elements on separate lines. fmt $ unlines ["hello", "world"]helloworldh(A simple comma-separated list formatter.listF ["hello", "world"]"[hello, world]"For multiline output, use l.i A version of hC that lets you supply your own building function for list elements.PFor instance, to format a list of lists you'd have to do this (since there's no  instance for lists):listF' listF [[1,2,3],[4,5,6]]"[[1, 2, 3], [4, 5, 6]]"j A multiline formatter for lists.fmt $ blockListF [1,2,3]- 1- 2- 3+Multi-line elements are indented correctly: >>> 3fmt $ blockListF ["hello\nworld", "foo\nbar\nquix"]$ - hello world - foo bar quix k A version of jO that lets you supply your own building function for list elements (instead of .) and choose the bullet character (instead of "-").l!A JSON-style formatter for lists.fmt $ jsonListF [1,2,3][ 1, 2, 3]Like j%, it handles multiline elements well:2fmt $ jsonListF ["hello\nworld", "foo\nbar\nquix"][ hello world, foo bar quix]m A version of lC that lets you supply your own building function for list elements.nbA 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 r.o A version of nE that lets you supply your own building function for keys and values.pA YAML-like map formatter:Ifmt $ blockMapF [("Odds", blockListF [1,3]), ("Evens", blockListF [2,4])]Odds: - 1 - 3Evens: - 2 - 4q A version of pE that lets you supply your own building function for keys and values.r"A JSON-like map formatter (unlike n, always multiline):Ffmt $ jsonMapF [("Odds", jsonListF [1,3]), ("Evens", jsonListF [2,4])] { Odds: [ 1 , 3 ], Evens: [ 2 , 4 ]}s A version of rE that lets you supply your own building function for keys and values.t=Format a list like a tuple. (This function is used to define  .)uLike  for , but displays  as  <Nothing> instead of an empty string.:build (Nothing :: Maybe Int)""build (Just 1 :: Maybe Int)"1"u:maybeF (Nothing :: Maybe Int) "<Nothing>"maybeF (Just 1 :: Maybe Int)"1"v Format an :eitherF (Right 1) "<Right: 1>"wTake the first N characters:prefixF 3 "hello""hel"xTake the last N characters:suffixF 3 "hello""llo"y padLeftF n c pads the string with character c% from the left side until it becomes nR characters wide (and does nothing if the string is already that long, or longer):padLeftF 5 '0' 12"00012"padLeftF 5 '0' 123456"123456"z padRightF n c pads the string with character c& from the right side until it becomes nR characters wide (and does nothing if the string is already that long, or longer):padRightF 5 ' ' "foo""foo "padRightF 5 ' ' "foobar""foobar"{ padBothF n c pads the string with character c" from both sides until it becomes nR characters wide (and does nothing if the string is already that long, or longer):padBothF 5 '=' "foo""=foo="padBothF 5 '=' "foobar""foobar"FWhen padding can't be distributed equally, the left side is preferred:padBoth 8 '=' "foo" "===foo=="|Break digits in a number:commaizeF 15830000 "15,830,000"}Format a number as octal:listF' octF [7,8,9,10]"[7, 10, 11, 12]"~Format a number as binary:listF' binF [7,8,9,10]"[111, 1000, 1001, 1010]"-Format a number in arbitrary base (up to 36): baseF 3 10000 "111201101" baseF 7 10000"41104"baseF 36 10000"7ps"Format a floating-point number: floatF 3.1415"3.1415"ZNumbers 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]"YFormat 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]">Format a floating-point number with given amount of precision.PFor 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]"hFor 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]"+Display something only if the condition is  (empty string otherwise). >>> 9"Hello!" <> whenF showDetails (", details: "+|foobar|+"") Note that it can only take a / (because otherwise it would be unusable with (X-)-formatted strings which can resolve to any  ). Thus, use b if you need just one value: >>> 1"Maybe here's a number: "+|whenF cond (fmt n)|+"" +Display something only if the condition is  (empty string otherwise)..Format an arbitrary value without requiring a  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  or one of the following types: a functiona tuple (up to 8-tuples)list, , , , , , The exact format of Z might change in future versions, so don't rely on it. It's merely a convenience function.RXYZ[\]^_`abcdefghijkBulletBuilder for elementsStructure with elementslmnopqrstuvwxyz{|}~i ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~9XYZ[\]_^`abcdefghijklmnopqrs tuvwxyz{|}~RXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~X1Y1Z1[1\1]1^1_1    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"fmt-0.5.0.0-LgRxs9HLTl7LvZxcsnBsrWFmt Fmt.InternalFmt.Time Text.Printf PrintfTypeData.Text.Formatformat#text-1.2.2.2-KC7dWoG09dA1F6jKj5GSqhData.Text.Internal.BuilderBuilder*text-format-0.3.1.1-8ZE4oP9p3tVC9TQlQtvP1wData.Text.Buildablebuild BuildableData.Text.Format.Types.InternalFormat FormatTypeformat' Buildable'build' GetFields getFields GBuildablegbuildTupleFtupleFFormatAsBase64base64F base64UrlF FormatAsHexhexF FromBuilder fromBuildergroupIntatBase showSigned' intToDigit'indentF'fixedFordinalF $fFormatTyper$fFormatType(->)$fFormatAsBase64ByteString$fFormatAsBase64ByteString0$fFormatAsHexa$fFormatAsHexByteString$fFormatAsHexByteString0$fFromBuilderIO$fFromBuilderText$fFromBuilderText0$fFromBuilder[]$fFromBuilderBuildertimeFtzFtzNameF dateTimeFhmFhmsFhmsLFhmsPLFdayHalfF dayHalfUFhour24Fhour12Fhour24SFhour12SFminuteFsecondF picosecondF subsecondFepochF dateSlashF dateDashF dateSlashLFyearFyyFcenturyF monthNameFmonthNameShortFmonthF dayOfMonthFdayOfMonthOrdF dayOfMonthSFdayF weekYearFweekYYF weekCenturyFweekF dayOfWeekF dayNameShortFdayNameF weekFromZeroFdayOfWeekFromZeroFweekOfYearMonFdiffFyearsFdaysFhoursFminutesFsecondsF+||++||||+|++|||++||||++||++||formatLnfmtfmtLnindentFnameFunwordsFunlinesFlistFlistF' blockListF blockListF' jsonListF jsonListF'mapFmapF' blockMapF blockMapF'jsonMapF jsonMapF' tupleLikeFmaybeFeitherFprefixFsuffixFpadLeftF padRightFpadBothF commaizeFoctFbinFbaseFfloatFexptFprecFwhenFunlessFgenericF $fBuildable'a$fBuildable'(->)$fBuildable'Either$fBuildable'Maybe$fBuildable'IntSet$fBuildable'IntMap$fBuildable'Set$fBuildable'Map$fBuildable'Seq$fBuildable'NonEmpty$fBuildable'[]$fBuildable'[]0$fBuildable'(,,,,,,,)$fBuildable'(,,,,,,)$fBuildable'(,,,,,)$fBuildable'(,,,,)$fBuildable'(,,,)$fBuildable'(,,)$fBuildable'(,)$fBuildable'() $fGetFieldsU1 $fGetFieldsM1$fGetFieldsM10$fGetFieldsM11$fGetFields:*:$fGBuildable:+:$fGBuildableK1$fGBuildableM1$fGBuildableM10$fTupleF(,,,,,,,)$fTupleF(,,,,,,)$fTupleF(,,,,,)$fTupleF(,,,,) $fTupleF(,,,) $fTupleF(,,) $fTupleF(,) time-1.6.0.1Data.Time.Format.Locale dateTimeFmttimeFmt time12FmtamPmdateFmtbase Data.TuplefstmonthssndwDaysData.Time.Clock.UTCNominalDiffTimeData.Time.Clock.ScaleDiffTimeGHC.ShowshowGHC.BaseStringMaybeNothing Data.EitherEitherghc-prim GHC.TypesTrueFalseData.List.NonEmptyNonEmptycontainers-0.5.7.1 Data.SequenceSeq Data.Map.BaseMapData.IntMap.BaseIntMap Data.Set.BaseSetData.IntSet.BaseIntSet