31T(      !"#$%&'Safe35>LYHandy type synonym for the things we're working with. You should regard a value of type  Format m a bF as something which explains how to write some element of the monoid mO (a "string" for our purposes), and which will change the type of printf from a to ba. For instance, something which adds a responsibility to provide an additional argument of type t might have type Format m a (t -> a)W, while a formatter which somehow absolves you of that responsibility would have type Format m (t -> a) a.nWe can apply this to something like putStrLn to get a function for formatted printing. Typically you'll have  r = IO (), but that needn't be the case.EIf you just want to build a string / element of your monoid, we have sprintf = printfWith id Formatter for a constant string.%Inclusion of a string as an argument.Given a way to turn a value of type t into a string, this builds a formatter which demands an additional argument of type t and splices it in.Splice in anything showable.(QTransform a formatter for one type of string to another using the given function.TGeneralizes the string type that a formatter uses by applying fromString internally.|Show an integral value using the given base, and using the provided function to determine how to display individual digits. &Show an integral value in hexadecimal.  Show an integral value in octal. NShow a floating point value in exponential format. (e.g. 2.45e2, -1.5e-3) If digs| is Nothing, the value is shown to full precision, if it is Just d then at most d digits after the decimal point are shown. SShow a floating point value in standard decimal format. (e.g. 245000, -0.0015) If digs| is Nothing, the value is shown to full precision, if it is Just d then at most d digits after the decimal point are shown. Show a floating point value using standard decimal notation for arguments whose absolute value lies between 0.1 and 9,999,999, and scientific notation otherwise. If digs| is Nothing, the value is shown to full precision, if it is Just d then at most d digits after the decimal point are shown. We can use )| from the Arrow instance for Cokleisli w to produce formatters that manipulate the stack without printing. That is, we have /arr :: (Monoid m) => (s -> s') -> Format m s s'HPush an argument onto the stack to be consumed by subsequent formatters.>Duplicate an argument on the stack, making it available twice.)Swap the next two arguments on the stack.$Skip the next argument on the stack.9Apply a function to the argument on the top of the stack.>Apply a binary function to the top two arguments on the stack.( *+,-./  ( *Safe+,-./ Safe+,-./ Safe+,-./ Safe !"#+,-./  !"# !"# !"#Safe$%&'+,-./ $%&'$%&'$%&'0      !"# $% $& $' $( $)*categ_Lp7gRUluWFs7fqnlaWr1l0Control.Category.PrintfControl.Category.Printf.String#Control.Category.Printf.Text.Strict!Control.Category.Printf.Text.Lazy)Control.Category.Printf.ByteString.Strict'Control.Category.Printf.ByteString.LazyFormat printfWithsprintfci spliceWithsgeneralizeString intAtBasehexocteFloatfFloatgFloatpushdupswapskipapplyapply2printfprintfLnhPrintf hPrintfLn mapMonoidbase Control.Arrowarr$fIsStringCokleisliControl.Category>>><<<.idCategory