packages feed

PyF 0.11.1.0 → 0.11.1.1

raw patch · 55 files changed

+522/−51 lines, 55 filesdep ~basedep ~ghcdep ~ghc-bootPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base, ghc, ghc-boot, mtl, template-haskell

API changes (from Hackage documentation)

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ # Revision history for PyF +## 0.11.1.1 -- 2023-03-15++- Support for GHC 9.6. Thank you @Kleidukos for initiating the port.+ ## 0.11.1.0 -- 2022-09-24  - Support for OverloadedRecordsDot syntax in Meta. Thank you @Profpatsch for the report.
PyF.cabal view
@@ -1,6 +1,6 @@ cabal-version:       2.4 name:                PyF-version:             0.11.1.0+version:             0.11.1.1 synopsis:            Quasiquotations for a python like interpolated string formatter description:         Quasiquotations for a python like interpolated string formatter. license:             BSD-3-Clause@@ -9,7 +9,7 @@ maintainer:          guillaum.bouchard@gmail.com category:            Text build-type:          Simple-extra-source-files:  ChangeLog.md Readme.md test/golden/*.golden+extra-source-files:  ChangeLog.md Readme.md test/golden/*.golden test/golden96/*.golden  Flag python_test     Description: Enable extensive python testing@@ -27,15 +27,17 @@                   PyF.Internal.ParserEx                   PyF.Internal.Parser -  build-depends:       base >= 4.12 && < 4.18+  build-depends:       base >= 4.12 && < 4.19                      , bytestring >= 0.10.8 && < 0.12-                     , template-haskell >= 2.14.0 && < 2.20+                     , template-haskell >= 2.14.0 && < 2.21                      , text >= 1.2.3 && <= 2.1                      , time >= 1.8.0 && < 1.13                      , parsec >= 3.1.13 && < 3.2-                     , mtl >= 2.2.2 && < 2.3-                     , ghc >= 8.6.1 && < 9.6-                     , ghc-boot >= 8.6.1 && < 9.5+                     , mtl >= 2.2.2 && < 2.4+                     , ghc >= 8.6.1 && < 9.7+  if impl(ghc < 9.2.1)+    build-depends:+                       ghc-boot >= 8.6.1 && < 9.7   hs-source-dirs: src   ghc-options: -Wall -Wunused-packages -Wincomplete-uni-patterns   default-language:    Haskell2010
src/PyF/Formatters.hs view
@@ -173,9 +173,9 @@ reprFractional fmt precision f   | isInfinite f = Infinite sign (upperIt "inf")   | isNaN f = NaN (upperIt "nan")-  | isNegativeZero f =-    let (FractionalRepr Positive aa bb cc) = reprFractional fmt precision (abs f)-     in FractionalRepr Negative aa bb cc+  | isNegativeZero f = case reprFractional fmt precision (abs f) of+       FractionalRepr Positive aa bb cc -> FractionalRepr Negative aa bb cc+       other -> error $ "reprFractional (isNegativeZero f): The impossible happened : " ++ show other ++ ". Please open an issue at https://github.com/guibou/PyF/issues/"   | otherwise = FractionalRepr sign decimalPart fractionalPart suffixPart   where     upperIt s = case fmt of@@ -188,7 +188,9 @@       Fixed -> splitFractional (Numeric.showFFloatAlt precision iAbs "")       Exponent -> overrideExponent precision $ splitFractionalExp (Numeric.showEFloat precision iAbs "")       Generic -> splitFractionalExp (Numeric.showGFloatAlt precision iAbs "")-      Percent -> let (a, b, "") = splitFractional (Numeric.showFFloatAlt precision (iAbs * 100) "") in (a, b, "%")+      Percent -> case splitFractional (Numeric.showFFloatAlt precision (iAbs * 100) "") of+                  (a, b, "") -> (a, b, "%")+                  other -> error $ "reprFractional (format): The impossible happened : " ++ show other ++ ". Please open an issue at https://github.com/guibou/PyF/issues/"       Alternate fmt' -> format fmt'       Upper fmt' ->         let (a, b, c) = format fmt'
src/PyF/Internal/Meta.hs view
@@ -16,6 +16,10 @@ import HsTypes (HsWildCardBndrs (..), HsType (..), HsImplicitBndrs (HsIB), hsib_body) #endif +#if MIN_VERSION_ghc(9,6,0)+import Language.Haskell.Syntax.Basic (field_label)+#endif+ #if MIN_VERSION_ghc(8,10,0) import GHC.Hs.Expr as Expr import GHC.Hs.Extension as Ext@@ -31,8 +35,17 @@ import qualified Data.ByteString as B import qualified Language.Haskell.TH.Syntax as GhcTH import qualified Language.Haskell.TH.Syntax as TH++#if MIN_VERSION_ghc(9,6,0)+import PyF.Internal.ParserEx (fakeSettings)+#else import PyF.Internal.ParserEx (fakeLlvmConfig, fakeSettings)+#endif +#if MIN_VERSION_ghc(9,6,0)+import GHC.Types.SourceText (il_value, rationalFromFractionalLit,SourceText(..))+#endif+ #if MIN_VERSION_ghc(9,0,0) import GHC.Types.SrcLoc import GHC.Types.Name@@ -41,7 +54,11 @@ #if MIN_VERSION_ghc(9,2,0) import GHC.Utils.Outputable (ppr) import GHC.Types.Basic (Boxity(..))-import GHC.Types.SourceText (il_value, rationalFromFractionalLit)+#if MIN_VERSION_ghc(9,6,0)+import GHC.Types.SourceText (FractionalLit)+#else+import GHC.Types.SourceText (il_value, rationalFromFractionalLit, FractionalLit)+#endif import GHC.Driver.Ppr (showSDoc) #else import GHC.Utils.Outputable (ppr, showSDoc)@@ -64,6 +81,7 @@  #if MIN_VERSION_ghc(9,2,0) -- TODO: why this disapears in GHC >= 9.2?+fl_value :: FractionalLit -> Rational fl_value = rationalFromFractionalLit #endif @@ -118,14 +136,15 @@ toPat dynFlags p = todo "Advanced pattern match are not supported in PyF. See https://github.com/guibou/PyF/issues/107 if that's a problem for you." (showSDoc dynFlags . ppr $ p)  {- ORMOLU_DISABLE -}- toExp :: DynFlags -> Expr.HsExpr GhcPs -> TH.Exp toExp _ (Expr.HsVar _ n) =   let n' = unLoc n    in if isRdrDataCon n'         then TH.ConE (toName n')         else TH.VarE (toName n')-#if MIN_VERSION_ghc(9,0,0)+#if MIN_VERSION_ghc(9,6,0)+toExp _ (Expr.HsUnboundVar _ n)              = TH.UnboundVarE (TH.mkName . occNameString . rdrNameOcc $ n)+#elif MIN_VERSION_ghc(9,0,0) toExp _ (Expr.HsUnboundVar _ n)              = TH.UnboundVarE (TH.mkName . occNameString $ n) #else toExp _ (Expr.HsUnboundVar _ n)              = TH.UnboundVarE (TH.mkName . occNameString . Expr.unboundVarOcc $ n)@@ -134,7 +153,10 @@ toExp _ (Expr.HsLit _ l) = TH.LitE (toLit l) toExp _ (Expr.HsOverLit _ OverLit {ol_val}) = TH.LitE (toLit' ol_val) toExp d (Expr.HsApp _ e1 e2) = TH.AppE (toExp d . unLoc $ e1) (toExp d . unLoc $ e2)-#if MIN_VERSION_ghc(9,2,0)+#if MIN_VERSION_ghc(9,6,0)+toExp d (Expr.HsAppType _ e _ HsWC{hswc_body}) = TH.AppTypeE (toExp d . unLoc $ e) (toType . unLoc $ hswc_body)+toExp d (Expr.ExprWithTySig _ e HsWC{hswc_body=unLoc -> HsSig{sig_body}}) = TH.SigE (toExp d . unLoc $ e) (toType . unLoc $ sig_body)+#elif MIN_VERSION_ghc(9,2,0) toExp d (Expr.HsAppType _ e HsWC {hswc_body}) = TH.AppTypeE (toExp d . unLoc $ e) (toType . unLoc $ hswc_body) toExp d (Expr.ExprWithTySig _ e HsWC{hswc_body=unLoc -> HsSig{sig_body}}) = TH.SigE (toExp d . unLoc $ e) (toType . unLoc $ sig_body) #elif MIN_VERSION_ghc(8,8,0)@@ -147,7 +169,11 @@ toExp d (Expr.OpApp _ e1 o e2) = TH.UInfixE (toExp d . unLoc $ e1) (toExp d . unLoc $ o) (toExp d . unLoc $ e2) toExp d (Expr.NegApp _ e _) = TH.AppE (TH.VarE 'negate) (toExp d . unLoc $ e) -- NOTE: for lambda, there is only one match+#if MIN_VERSION_ghc(9,6,0)+toExp d (Expr.HsLam _ (Expr.MG _ (unLoc -> (map unLoc -> [Expr.Match _ _ (map unLoc -> ps) (Expr.GRHSs _ [unLoc -> Expr.GRHS _ _ (unLoc -> e)] _)])))) = TH.LamE (fmap (toPat d) ps) (toExp d e)+#else toExp d (Expr.HsLam _ (Expr.MG _ (unLoc -> (map unLoc -> [Expr.Match _ _ (map unLoc -> ps) (Expr.GRHSs _ [unLoc -> Expr.GRHS _ _ (unLoc -> e)] _)])) _)) = TH.LamE (fmap (toPat d) ps) (toExp d e)+#endif -- toExp (Expr.Let _ bs e)                       = TH.LetE (toDecs bs) (toExp e) -- toExp (Expr.If _ a b c)                       = TH.CondE (toExp a) (toExp b) (toExp c) -- toExp (Expr.MultiIf _ ifs)                    = TH.MultiIfE (map toGuard ifs)@@ -173,7 +199,7 @@ #else     tupArgs = case traverse toTupArg args of       Nothing -> error "Tuple section are not supported by template haskell < 8.10"-      Just args -> fmap (toExp d) args+      Just args' -> fmap (toExp d) args' #endif  {- ORMOLU_ENABLE -}@@ -205,14 +231,22 @@   (FromThen a b) -> TH.FromThenR (toExp d $ unLoc a) (toExp d $ unLoc b)   (FromTo a b) -> TH.FromToR (toExp d $ unLoc a) (toExp d $ unLoc b)   (FromThenTo a b c) -> TH.FromThenToR (toExp d $ unLoc a) (toExp d $ unLoc b) (toExp d $ unLoc c)-#if MIN_VERSION_ghc(9, 2, 0)+#if MIN_VERSION_ghc(9,6,0)+toExp _ (HsOverLabel _ lbl _) = TH.LabelE (fromSourceText lbl)+   where+     fromSourceText :: SourceText -> String+     fromSourceText (SourceText s) = s+     fromSourceText NoSourceText = ""+#elif MIN_VERSION_ghc(9, 2, 0) toExp _ (HsOverLabel _ lbl) = TH.LabelE (unpackFS lbl) #else -- It's not quite clear what to do in case when overloaded syntax is -- enabled thus match on Nothing toExp _ (HsOverLabel _ Nothing lbl) = TH.LabelE (unpackFS lbl) #endif-#if MIN_VERSION_ghc(9, 4, 0)+#if MIN_VERSION_ghc(9,6,0)+toExp dynFlags (HsGetField _ expr field) = TH.GetFieldE (toExp dynFlags (unLoc expr)) (unpackFS . field_label . unLoc . dfoLabel . unLoc $ field)+#elif MIN_VERSION_ghc(9, 4, 0) toExp dynFlags (HsGetField _ expr field) = TH.GetFieldE (toExp dynFlags (unLoc expr)) (unpackFS . unLoc . dfoLabel . unLoc $ field) toExp _ (HsProjection _ fields) = TH.ProjectionE (fmap (unpackFS . unLoc . dfoLabel . unLoc) fields) #elif MIN_VERSION_ghc(9, 2, 0)@@ -222,15 +256,21 @@ toExp dynFlags e = todo "toExp" (showSDoc dynFlags . ppr $ e)  todo :: (HasCallStack, Show e) => String -> e -> a-todo fun thing = error . concat $ [moduleName, ".", fun, ": not implemented: ", show thing]+todo fun thing = error . concat $ [moduleName, ".", fun, ": not implemented: ", show thing, "Please open an issue at https://github.com/guibou/PyF/issues"]  noTH :: (HasCallStack, Show e) => String -> e -> a-noTH fun thing = error . concat $ [moduleName, ".", fun, ": no TemplateHaskell for: ", show thing]+noTH fun thing = error . concat $ [moduleName, ".", fun, ": no TemplateHaskell for: ", show thing, "Please open an issue at https://github.com/guibou/PyF/issues"]  moduleName :: String moduleName = "PyF.Internal.Meta"  baseDynFlags :: [GhcTH.Extension] -> DynFlags-baseDynFlags exts =-  let enable = GhcTH.TemplateHaskellQuotes : exts-   in foldl xopt_set (defaultDynFlags fakeSettings fakeLlvmConfig) enable+baseDynFlags exts = foldl xopt_set dynFlags enable+  where+    enable = GhcTH.TemplateHaskellQuotes : exts+#if MIN_VERSION_ghc(9,6,0)+    dynFlags = defaultDynFlags fakeSettings+#else+    dynFlags = defaultDynFlags fakeSettings fakeLlvmConfig+#endif+
src/PyF/Internal/Parser.hs view
@@ -1,9 +1,15 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}  -- | This module is here to parse Haskell expression using the GHC Api module PyF.Internal.Parser (parseExpression) where +#if MIN_VERSION_ghc(9,6,0)+import GHC.Parser.Errors.Types (PsMessage)+#endif+ #if MIN_VERSION_ghc(9,0,0) import GHC.Parser.Lexer (ParseResult (..), PState (..)) #elif MIN_VERSION_ghc(8,10,0)@@ -18,14 +24,13 @@ import GHC.Utils.Error #endif -#if MIN_VERSION_ghc(9,2,0)+#if MIN_VERSION_ghc(9,4,0)+#elif MIN_VERSION_ghc(9,2,0) import qualified GHC.Parser.Errors.Ppr as ParserErrorPpr #endif  #if MIN_VERSION_ghc(9,0,0) import qualified GHC.Types.SrcLoc as SrcLoc-#else-import qualified SrcLoc #endif  #if MIN_VERSION_ghc(9,0,0)@@ -64,15 +69,26 @@ #elif MIN_VERSION_ghc(8,10,0)     PFailed PState{loc=srcLoc, messages=msgs} -> #else-    -- TODO: check for pattern failure     PFailed _ (SrcLoc.srcSpanEnd -> SrcLoc.RealSrcLoc srcLoc) doc -> #endif -#if MIN_VERSION_ghc(9,3,0)+#if MIN_VERSION_ghc(9,6,0)             let                 err = renderWithContext defaultSDocContext                     $ vcat                     $ map (formatBulleted defaultSDocContext)+                    $ map (\psMessage -> diagnosticMessage (defaultDiagnosticOpts @PsMessage) psMessage)+                    $ map errMsgDiagnostic+                    $ sortMsgBag Nothing+                    $ getMessages $ errorMessages+                line' = SrcLoc.srcLocLine srcLoc+                col = SrcLoc.srcLocCol srcLoc+            in Left (line', col, err)+#elif MIN_VERSION_ghc(9,3,0)+            let+                err = renderWithContext defaultSDocContext+                    $ vcat+                    $ map (formatBulleted defaultSDocContext)                     $ map diagnosticMessage                     $ map errMsgDiagnostic                     $ sortMsgBag Nothing@@ -100,4 +116,10 @@                 line = SrcLoc.srcLocLine srcLoc                 col = SrcLoc.srcLocCol srcLoc             in Left (line, col, err)+#endif++#if MIN_VERSION_ghc(8,10,0)+#elif MIN_VERSION_ghc(8,6,0)+    -- Only here to satisfy GHC checker which was not able to consider this as total with GHC <8.10+    PFailed _ _ _ -> error "The impossible happen: this case is not possible" #endif
src/PyF/Internal/ParserEx.hs view
@@ -8,8 +8,14 @@  {- ORMOLU_DISABLE -} -#if MIN_VERSION_ghc(9,0,0)+#if MIN_VERSION_ghc(9,6,0) import GHC.Settings.Config+import GHC.CmmToLlvm.Config (LlvmConfig(..))+import GHC.Utils.Fingerprint+import GHC.Platform+import GHC.Settings+#elif MIN_VERSION_ghc(9,0,0)+import GHC.Settings.Config import GHC.Driver.Session import GHC.Utils.Fingerprint import GHC.Platform@@ -206,5 +212,6 @@     POk s e -> unP (runECP_P e) s     PFailed ps -> PFailed ps #else+parseExpression :: RealSrcLoc -> String -> DynFlags -> ParseResult (LHsExpr GhcPs) parseExpression initLoc = parse initLoc Parser.parseExpression #endif
src/PyF/Internal/PythonSyntax.hs view
@@ -37,6 +37,12 @@ import Text.Parsec import Data.Data (Data) +#if MIN_VERSION_ghc(9,6,0)+-- For some reasons, theses function are not exported anymore by some others+import Data.Functor (void)+import Control.Monad (replicateM_)+#endif+ #if MIN_VERSION_ghc(9,0,0) import GHC.Types.SrcLoc import GHC.Data.FastString@@ -150,7 +156,7 @@   -- Special case for "::", we want to parse it as part of an expression,   -- unless it may be the end of the format field (':'), followed by a padding   -- char (':') followed by a padding specifier.-  res <- some ((try (string "::" <* notFollowedBy (oneOf "<>=^"))) <|> (pure <$> noneOf (charClosing : ":" :: String)))+  res <- some (try (string "::" <* notFollowedBy (oneOf "<>=^")) <|> (pure <$> noneOf (charClosing : ":" :: String)))   pure $ concat res  replacementField :: Parser Item
src/PyF/Internal/QQ.hs view
@@ -31,11 +31,11 @@ import Data.Data (Data (gmapQ), Typeable, cast) import Data.Kind import Data.List (intercalate)-import Data.Maybe (catMaybes, fromMaybe)+import Data.Maybe (catMaybes, fromMaybe, isJust) import Data.Proxy import Data.String (fromString)-import GHC (GenLocated (L), moduleNameString) + #if MIN_VERSION_ghc(9,0,0) import GHC.Tc.Utils.Monad (addErrAt) import GHC.Tc.Types (TcM)@@ -43,24 +43,31 @@ #else import OccName import TcRnTypes (TcM)-import TcSplice (lookupThName_maybe) import TcRnMonad (addErrAt) #endif +#if MIN_VERSION_ghc(9,6,0)+#else+import GHC (moduleNameString)+#endif+ #if MIN_VERSION_ghc(9,3,0) import GHC.Tc.Errors.Types import GHC.Types.Error+import GHC.Utils.Outputable (text)++#if MIN_VERSION_ghc(9,6,0)+#else import GHC.Driver.Errors.Types import GHC.Parser.Errors.Types-import GHC.Utils.Outputable (text) #endif+#endif    #if MIN_VERSION_ghc(9,0,0) import GHC.Types.Name.Reader #else-import FastString import RdrName #endif @@ -72,7 +79,6 @@ import HsExpr as Expr import HsExtension as Ext import HsPat as Pat-import HsLit #endif  #if MIN_VERSION_ghc(9,0,0)@@ -81,10 +87,8 @@ import SrcLoc #endif -#if MIN_VERSION_ghc(8,10,0)+#if MIN_VERSION_ghc(9,2,0) import GHC.Hs-#else-import HsSyn #endif  import GHC.TypeLits@@ -100,14 +104,11 @@ import Text.Parsec.Error   ( errorMessages,     messageString,-    newErrorMessage,-    setErrorPos,     showErrorMessages,   )-import Text.Parsec.Pos (newPos, initialPos)+import Text.Parsec.Pos (initialPos) import Text.ParserCombinators.Parsec.Error (Message (..)) import Unsafe.Coerce (unsafeCoerce)-import Data.Maybe (isJust)  -- | Configuration for the quasiquoter data Config = Config@@ -192,11 +193,16 @@     f :: forall a. (Data a, Typeable a) => a -> [Located RdrName]     f e = case cast @_ @(HsExpr GhcPs) e of #if MIN_VERSION_ghc(9,2,0)-      Just (HsVar _ l@(L a b)) -> [L (locA a) (unLoc l)]+      Just (HsVar _ l@(L a _)) -> [L (locA a) (unLoc l)] #else       Just (HsVar _ l) -> [l] #endif++#if MIN_VERSION_ghc(9,6,0)+      Just (HsLam _ (MG _ (unLoc -> (map unLoc -> [Expr.Match _ _ (map unLoc -> ps) (GRHSs _ [unLoc -> GRHS _ _ (unLoc -> e)] _)])))) -> filter keepVar subVars+#else       Just (HsLam _ (MG _ (unLoc -> (map unLoc -> [Expr.Match _ _ (map unLoc -> ps) (GRHSs _ [unLoc -> GRHS _ _ (unLoc -> e)] _)])) _)) -> filter keepVar subVars+#endif         where           keepVar (L _ n) = n `notElem` subPats           subVars = concat $ gmapQ f [e]@@ -225,9 +231,9 @@ doesExists :: (b, RdrName) -> Q (Maybe (String, b)) doesExists (loc, name) = do   res <- lookupName name-  case res of-    False -> pure (Just ("Variable not in scope: " <> show (toName name), loc))-    True -> pure Nothing+  if res+    then pure Nothing+    else pure (Just ("Variable not in scope: " <> show (toName name), loc))  -- | Check that all variables used in 'Item' exists, otherwise, fail. checkVariables :: [Item] -> Q (Maybe (SrcSpan, String))@@ -252,7 +258,10 @@ reportErrorAt :: SrcSpan -> String -> Q () reportErrorAt loc msg = unsafeRunTcM $ addErrAt loc msg'   where-#if MIN_VERSION_ghc(9,3,0)+#if MIN_VERSION_ghc(9,6,0)+    msg' = TcRnUnknownMessage (UnknownDiagnostic $ mkPlainError noHints $+                         text msg)+#elif MIN_VERSION_ghc(9,3,0)     msg' = TcRnUnknownMessage (GhcPsMessage $ PsUnknownMessage $ mkPlainError noHints $                          text msg) #else
test/Spec.hs view
@@ -81,6 +81,7 @@ showV :: KnownSymbol a => V a -> String showV = show +globalName :: String globalName = "Valérian"  spec :: Spec
test/SpecFail.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE ExtendedDefaultRules #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -29,8 +30,7 @@   makeTemplate :: String -> String-makeTemplate s = [fmt|\-{{-# LANGUAGE QuasiQuotes, ExtendedDefaultRules, TypeApplications #-}}+makeTemplate s = [fmt|{{-# LANGUAGE QuasiQuotes, ExtendedDefaultRules, TypeApplications #-}} import PyF truncate' = truncate @Float @Int hello = "hello"@@ -94,7 +94,12 @@  golden :: HasCallStack => String -> String -> IO () golden name output = do-  let goldenFile = "test/golden" </> (name <> ".golden")+  let+#if __GLASGOW_HASKELL__ >= 906+      goldenFile = "test/golden96" </> (name <> ".golden")+#else+      goldenFile = "test/golden" </> (name <> ".golden")+#endif       actualFile = "test/golden" </> (name <> ".actual")   -- It can fail if the golden file does not exists   goldenContentE :: Either SomeException String <- try $ readFile goldenFile
+ test/golden96/Hello {length name}.16675806454852491955.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:36: error:+    • Variable not in scope: name+    • In the quasi-quotation: [fmt|Hello {length name}|]+  |+7 | main = putStrLn [fmt|Hello {length name}|]+  |                                    ^^^^
+ test/golden96/Hello {name}.16618004304593959603.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:29: error:+    • Variable not in scope: name+    • In the quasi-quotation: [fmt|Hello {name}|]+  |+7 | main = putStrLn [fmt|Hello {name}|]+  |                             ^^^^
+ test/golden96/Hello {piCL.{precision}}.9628757040831863475.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:34: error:+    • Variable not in scope: precision+    • In the quasi-quotation: [fmt|Hello {pi:.{precision}}|]+  |+7 | main = putStrLn [fmt|Hello {pi:.{precision}}|]+  |                                  ^^^^^^^^^
+ test/golden96/Hello {piCL.{truncate number + precision}}.18094049741103110835.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:52: error:+    • Variable not in scope: precision+    • In the quasi-quotation: [fmt|Hello {pi:.{truncate number + precision}}|]+  |+7 | main = putStrLn [fmt|Hello {pi:.{truncate number + precision}}|]+  |                                                    ^^^^^^^^^
+ test/golden96/Hello {piCL{width}}.15463239215289408179.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:33: error:+    • Variable not in scope: width+    • In the quasi-quotation: [fmt|Hello {pi:{width}}|]+  |+7 | main = putStrLn [fmt|Hello {pi:{width}}|]+  |                                 ^^^^^
+ test/golden96/fooBSPbar.17645057532673886893.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:25: error:+    • Lexical error in literal section+    • In the quasi-quotation: [fmt|foo\Pbar|]+  |+7 | main = putStrLn [fmt|foo\Pbar|]+  |                         ^
+ test/golden96/fooNLbliBSPbar.16759496276764189145.golden view
@@ -0,0 +1,8 @@++INITIALPATH:8:4: error:+    • Lexical error in literal section+    • In the quasi-quotation: [fmt|foo+bli\Pbar|]+  |+8 | bli\Pbar|]+  |    ^
+ test/golden96/hello { world.10778336899993839283.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:35: error:+    • +unexpected end of input+expecting "::", ":" or "}"+    • In the quasi-quotation: [fmt|hello { world|]+  |+7 | main = putStrLn [fmt|hello { world|]+  |                                   ^
+ test/golden96/hello } world.5295037443422799539.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:28: error:+    • +unexpected '}'+expecting "{{", "}}", "{" or end of input+    • In the quasi-quotation: [fmt|hello } world|]+  |+7 | main = putStrLn [fmt|hello } world|]+  |                            ^
+ test/golden96/helloNL {NLlet a = 5NL b = 10NLin 1 + - SL lalalal}.3018767237106994099.golden view
@@ -0,0 +1,11 @@++INITIALPATH:11:10: error:+    • parse error on input `/' in haskell expression+    • In the quasi-quotation: [fmt|hello+    {+let a = 5+    b = 10+in 1 + - / lalalal}|]+   |+11 | in 1 + - / lalalal}|]+   |          ^
+ test/golden96/helloNLNLNL{piCLl}.13123157148160021427.golden view
@@ -0,0 +1,12 @@++INITIALPATH:10:6: error:+    • +unexpected "}"+expecting "<", ">", "^" or "="+    • In the quasi-quotation: [fmt|hello+++{pi:l}|]+   |+10 | {pi:l}|]+   |      ^
+ test/golden96/{1 + - SL lalalal}.14923086665437293731.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:29: error:+    • parse error on input `/' in haskell expression+    • In the quasi-quotation: [fmt|{1 + - / lalalal}|]+  |+7 | main = putStrLn [fmt|{1 + - / lalalal}|]+  |                             ^
+ test/golden96/{TrueCLd}.12627313193367841398.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral Bool’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Decimal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing True)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Decimal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing True)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Decimal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing True)+  |+7 | main = putStrLn [fmt|{True:d}|]+  |                      ^^^^^^^^^^
+ test/golden96/{TrueCLf}.18281408089045870326.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Real Bool’ arising from a use of ‘PyF.Internal.QQ.formatAnyFractional’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Fixed PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) True)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Fixed PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) True)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Fixed PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) True)+  |+7 | main = putStrLn [fmt|{True:f}|]+  |                      ^^^^^^^^^^
+ test/golden96/{True}.16254223077612353942.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘PyF.Internal.QQ.FormatAny2 (PyFClassify Bool) Bool PyF.Formatters.AlignAll’ arising from a use of ‘PyF.Internal.QQ.formatAny’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAny PyF.Formatters.Minus PyF.Internal.QQ.PaddingDefaultK Nothing (Nothing :: Maybe Int) True)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAny PyF.Formatters.Minus PyF.Internal.QQ.PaddingDefaultK Nothing (Nothing :: Maybe Int) True)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAny PyF.Formatters.Minus PyF.Internal.QQ.PaddingDefaultK Nothing (Nothing :: Maybe Int) True)+  |+7 | main = putStrLn [fmt|{True}|]+  |                      ^^^^^^^^
+ test/golden96/{helloCL s}.13047921915648718386.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:30: error:+    • Type incompatible with sign field ( ), use any of {'b', 'd', 'e', 'E', 'f', 'F', 'g', 'G', 'n', 'o', 'x', 'X', '%'} or remove the sign field.+    • In the quasi-quotation: [fmt|{hello: s}|]+  |+7 | main = putStrLn [fmt|{hello: s}|]+  |                              ^
+ test/golden96/{helloCL%}.1257653362598537778.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Real String’ arising from a use of ‘PyF.Internal.QQ.formatAnyFractional’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Percent PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Percent PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Percent PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+  |+7 | main = putStrLn [fmt|{hello:%}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCL+s}.1657517030647448626.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:30: error:+    • Type incompatible with sign field (+), use any of {'b', 'd', 'e', 'E', 'f', 'F', 'g', 'G', 'n', 'o', 'x', 'X', '%'} or remove the sign field.+    • In the quasi-quotation: [fmt|{hello:+s}|]+  |+7 | main = putStrLn [fmt|{hello:+s}|]+  |                              ^
+ test/golden96/{helloCL,s}.14139635988852178482.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:30: error:+    • String type is incompatible with grouping (_ or ,).+    • In the quasi-quotation: [fmt|{hello:,s}|]+  |+7 | main = putStrLn [fmt|{hello:,s}|]+  |                              ^
+ test/golden96/{helloCL-s}.12627805606214404146.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:30: error:+    • Type incompatible with sign field (-), use any of {'b', 'd', 'e', 'E', 'f', 'F', 'g', 'G', 'n', 'o', 'x', 'X', '%'} or remove the sign field.+    • In the quasi-quotation: [fmt|{hello:-s}|]+  |+7 | main = putStrLn [fmt|{hello:-s}|]+  |                              ^
+ test/golden96/{helloCL=100s}.14374776122070431282.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:33: error:+    • String type is incompatible with inside padding (=).+    • In the quasi-quotation: [fmt|{hello:=100s}|]+  |+7 | main = putStrLn [fmt|{hello:=100s}|]+  |                                 ^
+ test/golden96/{helloCL=100}.9444838110946424370.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-64725]+    • String type is incompatible with inside padding (=).+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAny PyF.Formatters.Minus (PyF.Internal.QQ.PaddingK (100 :: Int) (Just (Nothing, PyF.Formatters.AlignInside))) Nothing (Nothing :: Maybe Int) hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAny PyF.Formatters.Minus (PyF.Internal.QQ.PaddingK (100 :: Int) (Just (Nothing, PyF.Formatters.AlignInside))) Nothing (Nothing :: Maybe Int) hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAny PyF.Formatters.Minus (PyF.Internal.QQ.PaddingK (100 :: Int) (Just (Nothing, PyF.Formatters.AlignInside))) Nothing (Nothing :: Maybe Int) hello)+  |+7 | main = putStrLn [fmt|{hello:=100}|]+  |                      ^^^^^^^^^^^^^^
+ test/golden96/{helloCLE}.15676531368138664498.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Real String’ arising from a use of ‘PyF.Internal.QQ.formatAnyFractional’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyFractional (PyF.Formatters.Upper PyF.Formatters.Exponent) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyFractional (PyF.Formatters.Upper PyF.Formatters.Exponent) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyFractional (PyF.Formatters.Upper PyF.Formatters.Exponent) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+  |+7 | main = putStrLn [fmt|{hello:E}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCLG}.17442699390234010162.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Real String’ arising from a use of ‘PyF.Internal.QQ.formatAnyFractional’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyFractional (PyF.Formatters.Upper PyF.Formatters.Generic) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyFractional (PyF.Formatters.Upper PyF.Formatters.Generic) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyFractional (PyF.Formatters.Upper PyF.Formatters.Generic) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+  |+7 | main = putStrLn [fmt|{hello:G}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCLX}.8447528333473699378.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral String’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral (PyF.Formatters.Upper PyF.Formatters.Hexa) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral (PyF.Formatters.Upper PyF.Formatters.Hexa) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral (PyF.Formatters.Upper PyF.Formatters.Hexa) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+  |+7 | main = putStrLn [fmt|{hello:X}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCL_s}.1094067961907256370.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:30: error:+    • String type is incompatible with grouping (_ or ,).+    • In the quasi-quotation: [fmt|{hello:_s}|]+  |+7 | main = putStrLn [fmt|{hello:_s}|]+  |                              ^
+ test/golden96/{helloCLb}.14869862508711808562.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral String’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Binary PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Binary PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Binary PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+  |+7 | main = putStrLn [fmt|{hello:b}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCLd}.1892681375540151858.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral String’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Decimal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Decimal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Decimal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+  |+7 | main = putStrLn [fmt|{hello:d}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCLe}.13933826712837941810.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Real String’ arising from a use of ‘PyF.Internal.QQ.formatAnyFractional’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Exponent PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Exponent PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Exponent PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+  |+7 | main = putStrLn [fmt|{hello:e}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCLf}.14332487603622862386.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Real String’ arising from a use of ‘PyF.Internal.QQ.formatAnyFractional’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Fixed PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Fixed PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Fixed PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+  |+7 | main = putStrLn [fmt|{hello:f}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCLg}.9607247906229690930.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Real String’ arising from a use of ‘PyF.Internal.QQ.formatAnyFractional’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Generic PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Generic PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyFractional PyF.Formatters.Generic PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing (Just 6 :: Maybe Int) hello)+  |+7 | main = putStrLn [fmt|{hello:g}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCLo}.9389880575827657266.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral String’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Octal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Octal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Octal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+  |+7 | main = putStrLn [fmt|{hello:o}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{helloCLx}.14710080644372944434.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral String’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Hexa PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Hexa PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Hexa PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing hello)+  |+7 | main = putStrLn [fmt|{hello:x}|]+  |                      ^^^^^^^^^^^
+ test/golden96/{numberCLX}.4609648040604121432.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral Float’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral (PyF.Formatters.Upper PyF.Formatters.Hexa) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral (PyF.Formatters.Upper PyF.Formatters.Hexa) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral (PyF.Formatters.Upper PyF.Formatters.Hexa) PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+  |+7 | main = putStrLn [fmt|{number:X}|]+  |                      ^^^^^^^^^^^^
+ test/golden96/{numberCLb}.8801685868342243288.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral Float’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Binary PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Binary PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Binary PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+  |+7 | main = putStrLn [fmt|{number:b}|]+  |                      ^^^^^^^^^^^^
+ test/golden96/{numberCLd}.13336740346716692056.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral Float’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Decimal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Decimal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Decimal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+  |+7 | main = putStrLn [fmt|{number:d}|]+  |                      ^^^^^^^^^^^^
+ test/golden96/{numberCLo}.12467189151987896600.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral Float’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Octal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Octal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Octal PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+  |+7 | main = putStrLn [fmt|{number:o}|]+  |                      ^^^^^^^^^^^^
+ test/golden96/{numberCLx}.14457861675063419224.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:22: error: [GHC-39999]+    • No instance for ‘Integral Float’ arising from a use of ‘PyF.Internal.QQ.formatAnyIntegral’+    • In the first argument of ‘putStrLn’, namely ‘(PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Hexa PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)’+      In the expression: putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Hexa PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+      In an equation for ‘main’: main = putStrLn (PyF.Internal.QQ.formatAnyIntegral PyF.Formatters.Hexa PyF.Formatters.Minus (Nothing :: Maybe (Int, PyF.Formatters.AnyAlign, Char)) Nothing number)+  |+7 | main = putStrLn [fmt|{number:x}|]+  |                      ^^^^^^^^^^^^
+ test/golden96/{piCL.{SL}}.6840925804160914882.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:28: error:+    • parse error on input `/' in haskell expression+    • In the quasi-quotation: [fmt|{pi:.{/}}|]+  |+7 | main = putStrLn [fmt|{pi:.{/}}|]+  |                            ^
+ test/golden96/{piCL.{}}.9894464503607709506.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:28: error:+    • +unexpected "}"+expecting an haskell expression+    • In the quasi-quotation: [fmt|{pi:.{}}|]+  |+7 | main = putStrLn [fmt|{pi:.{}}|]+  |                            ^
+ test/golden96/{truncate numberCL.3b}.11608798523190422838.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:41: error:+    • Type incompatible with precision (.3), use any of {'e', 'E', 'f', 'F', 'g', 'G', 'n', 's', '%'} or remove the precision field.+    • In the quasi-quotation: [fmt|{truncate number:.3b}|]+  |+7 | main = putStrLn [fmt|{truncate number:.3b}|]+  |                                         ^
+ test/golden96/{truncate numberCL.3d}.9142976352287206710.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:41: error:+    • Type incompatible with precision (.3), use any of {'e', 'E', 'f', 'F', 'g', 'G', 'n', 's', '%'} or remove the precision field.+    • In the quasi-quotation: [fmt|{truncate number:.3d}|]+  |+7 | main = putStrLn [fmt|{truncate number:.3d}|]+  |                                         ^
+ test/golden96/{truncate numberCL.3o}.1443712191031422262.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:41: error:+    • Type incompatible with precision (.3), use any of {'e', 'E', 'f', 'F', 'g', 'G', 'n', 's', '%'} or remove the precision field.+    • In the quasi-quotation: [fmt|{truncate number:.3o}|]+  |+7 | main = putStrLn [fmt|{truncate number:.3o}|]+  |                                         ^
+ test/golden96/{truncate numberCL.3x}.12613302271643495734.golden view
@@ -0,0 +1,7 @@++INITIALPATH:7:41: error:+    • Type incompatible with precision (.3), use any of {'e', 'E', 'f', 'F', 'g', 'G', 'n', 's', '%'} or remove the precision field.+    • In the quasi-quotation: [fmt|{truncate number:.3x}|]+  |+7 | main = putStrLn [fmt|{truncate number:.3x}|]+  |                                         ^
+ test/golden96/{}.14986928820806517861.golden view
@@ -0,0 +1,9 @@++INITIALPATH:7:23: error:+    • +unexpected "}"+expecting an haskell expression+    • In the quasi-quotation: [fmt|{}|]+  |+7 | main = putStrLn [fmt|{}|]+  |                       ^