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 +4/−0
- PyF.cabal +9/−7
- src/PyF/Formatters.hs +6/−4
- src/PyF/Internal/Meta.hs +52/−12
- src/PyF/Internal/Parser.hs +27/−5
- src/PyF/Internal/ParserEx.hs +8/−1
- src/PyF/Internal/PythonSyntax.hs +7/−1
- src/PyF/Internal/QQ.hs +27/−18
- test/Spec.hs +1/−0
- test/SpecFail.hs +8/−3
- test/golden96/Hello {length name}.16675806454852491955.golden +7/−0
- test/golden96/Hello {name}.16618004304593959603.golden +7/−0
- test/golden96/Hello {piCL.{precision}}.9628757040831863475.golden +7/−0
- test/golden96/Hello {piCL.{truncate number + precision}}.18094049741103110835.golden +7/−0
- test/golden96/Hello {piCL{width}}.15463239215289408179.golden +7/−0
- test/golden96/fooBSPbar.17645057532673886893.golden +7/−0
- test/golden96/fooNLbliBSPbar.16759496276764189145.golden +8/−0
- test/golden96/hello { world.10778336899993839283.golden +9/−0
- test/golden96/hello } world.5295037443422799539.golden +9/−0
- test/golden96/helloNL {NLlet a = 5NL b = 10NLin 1 + - SL lalalal}.3018767237106994099.golden +11/−0
- test/golden96/helloNLNLNL{piCLl}.13123157148160021427.golden +12/−0
- test/golden96/{1 + - SL lalalal}.14923086665437293731.golden +7/−0
- test/golden96/{TrueCLd}.12627313193367841398.golden +9/−0
- test/golden96/{TrueCLf}.18281408089045870326.golden +9/−0
- test/golden96/{True}.16254223077612353942.golden +9/−0
- test/golden96/{helloCL s}.13047921915648718386.golden +7/−0
- test/golden96/{helloCL%}.1257653362598537778.golden +9/−0
- test/golden96/{helloCL+s}.1657517030647448626.golden +7/−0
- test/golden96/{helloCL,s}.14139635988852178482.golden +7/−0
- test/golden96/{helloCL-s}.12627805606214404146.golden +7/−0
- test/golden96/{helloCL=100s}.14374776122070431282.golden +7/−0
- test/golden96/{helloCL=100}.9444838110946424370.golden +9/−0
- test/golden96/{helloCLE}.15676531368138664498.golden +9/−0
- test/golden96/{helloCLG}.17442699390234010162.golden +9/−0
- test/golden96/{helloCLX}.8447528333473699378.golden +9/−0
- test/golden96/{helloCL_s}.1094067961907256370.golden +7/−0
- test/golden96/{helloCLb}.14869862508711808562.golden +9/−0
- test/golden96/{helloCLd}.1892681375540151858.golden +9/−0
- test/golden96/{helloCLe}.13933826712837941810.golden +9/−0
- test/golden96/{helloCLf}.14332487603622862386.golden +9/−0
- test/golden96/{helloCLg}.9607247906229690930.golden +9/−0
- test/golden96/{helloCLo}.9389880575827657266.golden +9/−0
- test/golden96/{helloCLx}.14710080644372944434.golden +9/−0
- test/golden96/{numberCLX}.4609648040604121432.golden +9/−0
- test/golden96/{numberCLb}.8801685868342243288.golden +9/−0
- test/golden96/{numberCLd}.13336740346716692056.golden +9/−0
- test/golden96/{numberCLo}.12467189151987896600.golden +9/−0
- test/golden96/{numberCLx}.14457861675063419224.golden +9/−0
- test/golden96/{piCL.{SL}}.6840925804160914882.golden +7/−0
- test/golden96/{piCL.{}}.9894464503607709506.golden +9/−0
- test/golden96/{truncate numberCL.3b}.11608798523190422838.golden +7/−0
- test/golden96/{truncate numberCL.3d}.9142976352287206710.golden +7/−0
- test/golden96/{truncate numberCL.3o}.1443712191031422262.golden +7/−0
- test/golden96/{truncate numberCL.3x}.12613302271643495734.golden +7/−0
- test/golden96/{}.14986928820806517861.golden +9/−0
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|{}|]+ | ^