diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -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.
diff --git a/PyF.cabal b/PyF.cabal
--- a/PyF.cabal
+++ b/PyF.cabal
@@ -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
diff --git a/src/PyF/Formatters.hs b/src/PyF/Formatters.hs
--- a/src/PyF/Formatters.hs
+++ b/src/PyF/Formatters.hs
@@ -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'
diff --git a/src/PyF/Internal/Meta.hs b/src/PyF/Internal/Meta.hs
--- a/src/PyF/Internal/Meta.hs
+++ b/src/PyF/Internal/Meta.hs
@@ -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
+
diff --git a/src/PyF/Internal/Parser.hs b/src/PyF/Internal/Parser.hs
--- a/src/PyF/Internal/Parser.hs
+++ b/src/PyF/Internal/Parser.hs
@@ -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
diff --git a/src/PyF/Internal/ParserEx.hs b/src/PyF/Internal/ParserEx.hs
--- a/src/PyF/Internal/ParserEx.hs
+++ b/src/PyF/Internal/ParserEx.hs
@@ -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
diff --git a/src/PyF/Internal/PythonSyntax.hs b/src/PyF/Internal/PythonSyntax.hs
--- a/src/PyF/Internal/PythonSyntax.hs
+++ b/src/PyF/Internal/PythonSyntax.hs
@@ -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
diff --git a/src/PyF/Internal/QQ.hs b/src/PyF/Internal/QQ.hs
--- a/src/PyF/Internal/QQ.hs
+++ b/src/PyF/Internal/QQ.hs
@@ -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
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -81,6 +81,7 @@
 showV :: KnownSymbol a => V a -> String
 showV = show
 
+globalName :: String
 globalName = "Valérian"
 
 spec :: Spec
diff --git a/test/SpecFail.hs b/test/SpecFail.hs
--- a/test/SpecFail.hs
+++ b/test/SpecFail.hs
@@ -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
diff --git a/test/golden96/Hello {length name}.16675806454852491955.golden b/test/golden96/Hello {length name}.16675806454852491955.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/Hello {length name}.16675806454852491955.golden
@@ -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}|]
+  |                                    ^^^^
diff --git a/test/golden96/Hello {name}.16618004304593959603.golden b/test/golden96/Hello {name}.16618004304593959603.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/Hello {name}.16618004304593959603.golden
@@ -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}|]
+  |                             ^^^^
diff --git a/test/golden96/Hello {piCL.{precision}}.9628757040831863475.golden b/test/golden96/Hello {piCL.{precision}}.9628757040831863475.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/Hello {piCL.{precision}}.9628757040831863475.golden
@@ -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}}|]
+  |                                  ^^^^^^^^^
diff --git a/test/golden96/Hello {piCL.{truncate number + precision}}.18094049741103110835.golden b/test/golden96/Hello {piCL.{truncate number + precision}}.18094049741103110835.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/Hello {piCL.{truncate number + precision}}.18094049741103110835.golden
@@ -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}}|]
+  |                                                    ^^^^^^^^^
diff --git a/test/golden96/Hello {piCL{width}}.15463239215289408179.golden b/test/golden96/Hello {piCL{width}}.15463239215289408179.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/Hello {piCL{width}}.15463239215289408179.golden
@@ -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}}|]
+  |                                 ^^^^^
diff --git a/test/golden96/fooBSPbar.17645057532673886893.golden b/test/golden96/fooBSPbar.17645057532673886893.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/fooBSPbar.17645057532673886893.golden
@@ -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|]
+  |                         ^
diff --git a/test/golden96/fooNLbliBSPbar.16759496276764189145.golden b/test/golden96/fooNLbliBSPbar.16759496276764189145.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/fooNLbliBSPbar.16759496276764189145.golden
@@ -0,0 +1,8 @@
+
+INITIALPATH:8:4: error:
+    • Lexical error in literal section
+    • In the quasi-quotation: [fmt|foo
+bli\Pbar|]
+  |
+8 | bli\Pbar|]
+  |    ^
diff --git a/test/golden96/hello { world.10778336899993839283.golden b/test/golden96/hello { world.10778336899993839283.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/hello { world.10778336899993839283.golden
@@ -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|]
+  |                                   ^
diff --git a/test/golden96/hello } world.5295037443422799539.golden b/test/golden96/hello } world.5295037443422799539.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/hello } world.5295037443422799539.golden
@@ -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|]
+  |                            ^
diff --git a/test/golden96/helloNL    {NLlet a = 5NL    b = 10NLin 1 + - SL lalalal}.3018767237106994099.golden b/test/golden96/helloNL    {NLlet a = 5NL    b = 10NLin 1 + - SL lalalal}.3018767237106994099.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/helloNL    {NLlet a = 5NL    b = 10NLin 1 + - SL lalalal}.3018767237106994099.golden
@@ -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}|]
+   |          ^
diff --git a/test/golden96/helloNLNLNL{piCLl}.13123157148160021427.golden b/test/golden96/helloNLNLNL{piCLl}.13123157148160021427.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/helloNLNLNL{piCLl}.13123157148160021427.golden
@@ -0,0 +1,12 @@
+
+INITIALPATH:10:6: error:
+    • 
+unexpected "}"
+expecting "<", ">", "^" or "="
+    • In the quasi-quotation: [fmt|hello
+
+
+{pi:l}|]
+   |
+10 | {pi:l}|]
+   |      ^
diff --git a/test/golden96/{1 + - SL lalalal}.14923086665437293731.golden b/test/golden96/{1 + - SL lalalal}.14923086665437293731.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{1 + - SL lalalal}.14923086665437293731.golden
@@ -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}|]
+  |                             ^
diff --git a/test/golden96/{TrueCLd}.12627313193367841398.golden b/test/golden96/{TrueCLd}.12627313193367841398.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{TrueCLd}.12627313193367841398.golden
@@ -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}|]
+  |                      ^^^^^^^^^^
diff --git a/test/golden96/{TrueCLf}.18281408089045870326.golden b/test/golden96/{TrueCLf}.18281408089045870326.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{TrueCLf}.18281408089045870326.golden
@@ -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}|]
+  |                      ^^^^^^^^^^
diff --git a/test/golden96/{True}.16254223077612353942.golden b/test/golden96/{True}.16254223077612353942.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{True}.16254223077612353942.golden
@@ -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}|]
+  |                      ^^^^^^^^
diff --git a/test/golden96/{helloCL s}.13047921915648718386.golden b/test/golden96/{helloCL s}.13047921915648718386.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCL s}.13047921915648718386.golden
@@ -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}|]
+  |                              ^
diff --git a/test/golden96/{helloCL%}.1257653362598537778.golden b/test/golden96/{helloCL%}.1257653362598537778.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCL%}.1257653362598537778.golden
@@ -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:%}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCL+s}.1657517030647448626.golden b/test/golden96/{helloCL+s}.1657517030647448626.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCL+s}.1657517030647448626.golden
@@ -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}|]
+  |                              ^
diff --git a/test/golden96/{helloCL,s}.14139635988852178482.golden b/test/golden96/{helloCL,s}.14139635988852178482.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCL,s}.14139635988852178482.golden
@@ -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}|]
+  |                              ^
diff --git a/test/golden96/{helloCL-s}.12627805606214404146.golden b/test/golden96/{helloCL-s}.12627805606214404146.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCL-s}.12627805606214404146.golden
@@ -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}|]
+  |                              ^
diff --git a/test/golden96/{helloCL=100s}.14374776122070431282.golden b/test/golden96/{helloCL=100s}.14374776122070431282.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCL=100s}.14374776122070431282.golden
@@ -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}|]
+  |                                 ^
diff --git a/test/golden96/{helloCL=100}.9444838110946424370.golden b/test/golden96/{helloCL=100}.9444838110946424370.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCL=100}.9444838110946424370.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^^^^
diff --git a/test/golden96/{helloCLE}.15676531368138664498.golden b/test/golden96/{helloCLE}.15676531368138664498.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLE}.15676531368138664498.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCLG}.17442699390234010162.golden b/test/golden96/{helloCLG}.17442699390234010162.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLG}.17442699390234010162.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCLX}.8447528333473699378.golden b/test/golden96/{helloCLX}.8447528333473699378.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLX}.8447528333473699378.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCL_s}.1094067961907256370.golden b/test/golden96/{helloCL_s}.1094067961907256370.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCL_s}.1094067961907256370.golden
@@ -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}|]
+  |                              ^
diff --git a/test/golden96/{helloCLb}.14869862508711808562.golden b/test/golden96/{helloCLb}.14869862508711808562.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLb}.14869862508711808562.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCLd}.1892681375540151858.golden b/test/golden96/{helloCLd}.1892681375540151858.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLd}.1892681375540151858.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCLe}.13933826712837941810.golden b/test/golden96/{helloCLe}.13933826712837941810.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLe}.13933826712837941810.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCLf}.14332487603622862386.golden b/test/golden96/{helloCLf}.14332487603622862386.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLf}.14332487603622862386.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCLg}.9607247906229690930.golden b/test/golden96/{helloCLg}.9607247906229690930.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLg}.9607247906229690930.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCLo}.9389880575827657266.golden b/test/golden96/{helloCLo}.9389880575827657266.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLo}.9389880575827657266.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{helloCLx}.14710080644372944434.golden b/test/golden96/{helloCLx}.14710080644372944434.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{helloCLx}.14710080644372944434.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^
diff --git a/test/golden96/{numberCLX}.4609648040604121432.golden b/test/golden96/{numberCLX}.4609648040604121432.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{numberCLX}.4609648040604121432.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^^
diff --git a/test/golden96/{numberCLb}.8801685868342243288.golden b/test/golden96/{numberCLb}.8801685868342243288.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{numberCLb}.8801685868342243288.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^^
diff --git a/test/golden96/{numberCLd}.13336740346716692056.golden b/test/golden96/{numberCLd}.13336740346716692056.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{numberCLd}.13336740346716692056.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^^
diff --git a/test/golden96/{numberCLo}.12467189151987896600.golden b/test/golden96/{numberCLo}.12467189151987896600.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{numberCLo}.12467189151987896600.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^^
diff --git a/test/golden96/{numberCLx}.14457861675063419224.golden b/test/golden96/{numberCLx}.14457861675063419224.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{numberCLx}.14457861675063419224.golden
@@ -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}|]
+  |                      ^^^^^^^^^^^^
diff --git a/test/golden96/{piCL.{SL}}.6840925804160914882.golden b/test/golden96/{piCL.{SL}}.6840925804160914882.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{piCL.{SL}}.6840925804160914882.golden
@@ -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:.{/}}|]
+  |                            ^
diff --git a/test/golden96/{piCL.{}}.9894464503607709506.golden b/test/golden96/{piCL.{}}.9894464503607709506.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{piCL.{}}.9894464503607709506.golden
@@ -0,0 +1,9 @@
+
+INITIALPATH:7:28: error:
+    • 
+unexpected "}"
+expecting an haskell expression
+    • In the quasi-quotation: [fmt|{pi:.{}}|]
+  |
+7 | main = putStrLn [fmt|{pi:.{}}|]
+  |                            ^
diff --git a/test/golden96/{truncate numberCL.3b}.11608798523190422838.golden b/test/golden96/{truncate numberCL.3b}.11608798523190422838.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{truncate numberCL.3b}.11608798523190422838.golden
@@ -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}|]
+  |                                         ^
diff --git a/test/golden96/{truncate numberCL.3d}.9142976352287206710.golden b/test/golden96/{truncate numberCL.3d}.9142976352287206710.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{truncate numberCL.3d}.9142976352287206710.golden
@@ -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}|]
+  |                                         ^
diff --git a/test/golden96/{truncate numberCL.3o}.1443712191031422262.golden b/test/golden96/{truncate numberCL.3o}.1443712191031422262.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{truncate numberCL.3o}.1443712191031422262.golden
@@ -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}|]
+  |                                         ^
diff --git a/test/golden96/{truncate numberCL.3x}.12613302271643495734.golden b/test/golden96/{truncate numberCL.3x}.12613302271643495734.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{truncate numberCL.3x}.12613302271643495734.golden
@@ -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}|]
+  |                                         ^
diff --git a/test/golden96/{}.14986928820806517861.golden b/test/golden96/{}.14986928820806517861.golden
new file mode 100644
--- /dev/null
+++ b/test/golden96/{}.14986928820806517861.golden
@@ -0,0 +1,9 @@
+
+INITIALPATH:7:23: error:
+    • 
+unexpected "}"
+expecting an haskell expression
+    • In the quasi-quotation: [fmt|{}|]
+  |
+7 | main = putStrLn [fmt|{}|]
+  |                       ^
