[Git][ghc/ghc][wip/9.12.3-backports] 6 commits: haddock: Preserve indentation in multiline examples
by Zubin (@wz1000) 16 Sep '25
by Zubin (@wz1000) 16 Sep '25
16 Sep '25
Zubin pushed to branch wip/9.12.3-backports at Glasgow Haskell Compiler / GHC
Commits:
266d0649 by Ryan Hendrickson at 2025-09-16T14:41:06+05:30
haddock: Preserve indentation in multiline examples
Intended for use with :{ :}, but doesn't look for those characters. Any
consecutive lines with birdtracks will only have initial whitespace
stripped up to the column of the first line.
(cherry picked from commit 75cadf816544408f65d3baeec8092a7356d4b720)
- - - - -
d52b0a9c by Ryan Hendrickson at 2025-09-16T14:41:06+05:30
haddock: Fix links to type operators
(cherry picked from commit a0adc30d892f14f543f39d5c45faccacbc28afb4)
- - - - -
606822f0 by Ryan Hendrickson at 2025-09-16T14:41:06+05:30
haddock: Parse math even after ordinary characters
Fixes a bug where math sections were not recognized if preceded by a
character that isn't special (like space or a markup character).
(cherry picked from commit 6558467c0e3a9b97141ec9f0cdbadf3550c5cd3c)
- - - - -
b072547d by Ryan Hendrickson at 2025-09-16T14:41:06+05:30
haddock: Document instances from other packages
When attaching instances to `Interface`s, it isn't enough just to look
for instances in the list of `Interface`s being processed. We also need
to look in the modules on which they depend, including those outside of
this package.
Fixes #25147.
Fixes #26079.
(cherry picked from commit a26243fde4680271712a3d774e17f6cd6da4a652)
- - - - -
b8a0bddc by Zubin Duggal at 2025-09-16T14:41:06+05:30
haddock: Don't warn about missing link destinations for derived names.
Fixes #26114
(cherry picked from commit 5dabc718a04bfc4d277c5ff7f815ee3d6b9670cb)
- - - - -
0337f4ec by Zubin Duggal at 2025-09-16T14:41:06+05:30
Prepare 9.12.3
- - - - -
21 changed files:
- configure.ac
- docs/users_guide/9.12.3-notes.rst
- testsuite/driver/testlib.py
- testsuite/tests/haddock/haddock_testsuite/Makefile
- + testsuite/tests/haddock/haddock_testsuite/T26114.hs
- + testsuite/tests/haddock/haddock_testsuite/T26114.stdout
- testsuite/tests/haddock/haddock_testsuite/all.T
- testsuite/tests/polykinds/T14172.stderr
- utils/haddock/CHANGES.md
- utils/haddock/haddock-api/src/Haddock/Interface/AttachInstances.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Create.hs
- utils/haddock/haddock-api/src/Haddock/Interface/LexParseRn.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Rename.hs
- utils/haddock/haddock-api/src/Haddock/Types.hs
- utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs
- utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs
- utils/haddock/haddock-test/src/Test/Haddock/Config.hs
- utils/haddock/html-test/ref/Bug1004.html
- utils/haddock/html-test/ref/PatternSyns.html
- utils/haddock/html-test/ref/TypeOperators.html
- utils/haddock/html-test/src/TypeOperators.hs
Changes:
=====================================
configure.ac
=====================================
@@ -22,7 +22,7 @@ AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.12.2], [glasgow-ha
AC_CONFIG_MACRO_DIRS([m4])
# Set this to YES for a released version, otherwise NO
-: ${RELEASE=YES}
+: ${RELEASE=NO}
# The primary version (e.g. 7.5, 7.4.1) is set in the AC_INIT line
# above. If this is not a released version, then we will append the
=====================================
docs/users_guide/9.12.3-notes.rst
=====================================
@@ -13,6 +13,83 @@ Compiler
- Fixed re-exports of ``MkSolo`` and ``MkSolo#`` (:ghc-ticket:`25182`)
- Fixed the behavior of ``Language.Haskell.TH.mkName "FUN"`` (:ghc-ticket:`25174`)
+- Fixed miscompilation involving ``zonkEqTypes`` on ``AppTy/AppTy`` (:ghc-ticket:`26256`)
+- Fixed CprAnal to detect recursive newtypes (:ghc-ticket:`25944`)
+- Fixed specialisation of incoherent instances (:ghc-ticket:`25883`)
+- Fixed bytecode generation for ``tagToEnum# <LITERAL>`` (:ghc-ticket:`25975`)
+- Fixed panic with EmptyCase and RequiredTypeArguments (:ghc-ticket:`25004`)
+- Fixed ``tyConStupidTheta`` to handle ``PromotedDataCon`` (:ghc-ticket:`25739`)
+- Fixed unused import warnings for duplicate record fields (:ghc-ticket:`24035`)
+- Fixed lexing of ``"\^\"`` (:ghc-ticket:`25937`)
+- Fixed string gap collapsing (:ghc-ticket:`25784`)
+- Fixed lexing of comments in multiline strings (:ghc-ticket:`25609`)
+- Made unexpected LLVM versions a warning rather than an error (:ghc-ticket:`25915`)
+- Disabled ``-fprof-late-overloaded-calls`` for join points to avoid invalid transformations
+- Fixed bugs in ``integerRecipMod`` and ``integerPowMod`` (:ghc-ticket:`26017`)
+- Fixed ``naturalAndNot`` for NB/NS case (:ghc-ticket:`26230`)
+- Fixed ``ds_ev_typeable`` to use ``mkTrAppChecked`` (:ghc-ticket:`25998`)
+- Fixed GHC settings to always unescape escaped spaces (:ghc-ticket:`25204`)
+- Fixed issue with HasCallStack constraint caching (:ghc-ticket:`25529`)
+- Fixed archive member size writing logic in ``GHC.SysTools.Ar`` (:ghc-ticket:`26120`, :ghc-ticket:`22586`)
+
+Runtime System
+~~~~~~~~~~~~~~
+
+- Fixed ``MessageBlackHole.link`` to always be a valid closure
+- Fixed handling of WHITEHOLE in ``messageBlackHole`` (:ghc-ticket:`26205`)
+- Fixed ``rts_clearMemory`` logic when sanity checks are enabled (:ghc-ticket:`26011`)
+- Fixed underflow frame lookups in the bytecode interpreter (:ghc-ticket:`25750`)
+- Fixed overflows and reentrancy in interpreter statistics calculation (:ghc-ticket:`25756`)
+- Fixed INTERP_STATS profiling code (:ghc-ticket:`25695`)
+- Removed problematic ``n_free`` variable from nonmovingGC (:ghc-ticket:`26186`)
+- Fixed incorrect format specifiers in era profiling
+- Improved documentation of SLIDE and PACK bytecode instructions
+- Eliminated redundant ``SLIDE x 0`` bytecode instructions
+- Fixed compile issues on powerpc64 ELF v1
+
+Code Generation
+~~~~~~~~~~~~~~~
+
+- Fixed LLVM built-in variable predicate (was checking ``$llvm`` instead of ``@llvm``)
+- Fixed linkage of built-in arrays for LLVM (:ghc-ticket:`25769`)
+- Fixed code generation for SSE vector operations (:ghc-ticket:`25859`)
+- Fixed ``bswap64`` code generation on i386 (:ghc-ticket:`25601`)
+- Fixed sub-word arithmetic right shift on AArch64 (:ghc-ticket:`26061`)
+- Fixed LLVM vector literal emission to include type information
+- Fixed LLVM version detection
+- Fixed typo in ``padLiveArgs`` that caused segfaults (:ghc-ticket:`25770`, :ghc-ticket:`25773`)
+- Fixed constant-folding for Word->Float bitcasts
+- Added surface syntax for Word/Float bitcast operations
+- Fixed ``MOVD`` format in x86 NCG for ``unpackInt64X2#``
+- Added ``-finter-module-far-jumps`` flag for AArch64
+- Fixed RV64 J instruction handling for non-local jumps (:ghc-ticket:`25738`)
+- Reapplied division by constants optimization
+- Fixed TNTC to set CmmProc entry_label properly (:ghc-ticket:`25565`)
+
+Linker
+~~~~~~
+
+- Improved efficiency of proddable blocks structure (:ghc-ticket:`26009`)
+- Fixed Windows DLL loading to avoid redundant ``LoadLibraryEx`` calls (:ghc-ticket:`26009`)
+- Fixed incorrect use of ``break`` in nested for loop (:ghc-ticket:`26052`)
+- Fixed linker to not fail due to ``RTLD_NOW`` (:ghc-ticket:`25943`)
+- Dropped obsolete Windows XP compatibility checks
+
+GHCi
+~~~~
+
+- Fixed ``mkTopLevEnv`` to use ``loadInterfaceForModule`` instead of ``loadSrcInterface`` (:ghc-ticket:`25951`)
+
+Template Haskell
+~~~~~~~~~~~~~~~~
+
+- Added explicit export lists to all remaining template-haskell modules
+
+Build system
+~~~~~~~~~~~~~~~~
+
+- Exposed all of Backtraces' internals for ghc-internal (:ghc-ticket:`26049`)
+- Fixed cross-compilation configuration override (:ghc-ticket:`26236`)
Included libraries
~~~~~~~~~~~~~~~~~~
=====================================
testsuite/driver/testlib.py
=====================================
@@ -1725,7 +1725,7 @@ async def do_test(name: TestName,
dst_makefile = in_testdir('Makefile')
if src_makefile.exists():
makefile = src_makefile.read_text(encoding='UTF-8')
- makefile = re.sub('TOP=.*', 'TOP=%s' % config.top, makefile, 1)
+ makefile = re.sub('TOP=.*', 'TOP=%s' % config.top, makefile, count=1)
dst_makefile.write_text(makefile, encoding='UTF-8')
if opts.pre_cmd:
=====================================
testsuite/tests/haddock/haddock_testsuite/Makefile
=====================================
@@ -76,3 +76,7 @@ hypsrcTest:
.PHONY: haddockForeignTest
haddockForeignTest:
'$(HADDOCK)' A.hs B.hs F.hs arith.c
+
+.PHONY: T26114
+T26114:
+ '$(HADDOCK)' T26114.hs
=====================================
testsuite/tests/haddock/haddock_testsuite/T26114.hs
=====================================
@@ -0,0 +1,23 @@
+{-# LANGUAGE TypeFamilies #-}
+
+-- | Module
+module T26114 where
+
+-- | C1
+class C1 t where
+ type C2 t
+
+-- | A
+data A = A
+
+instance C1 A where
+ type C2 A = B
+
+-- | B
+data B = B
+
+instance C1 B where
+ type C2 B = C
+
+-- | C
+data C = C
=====================================
testsuite/tests/haddock/haddock_testsuite/T26114.stdout
=====================================
@@ -0,0 +1,3 @@
+[1 of 1] Compiling T26114 ( T26114.hs, nothing )
+Haddock coverage:
+ 100% ( 5 / 5) in 'T26114'
=====================================
testsuite/tests/haddock/haddock_testsuite/all.T
=====================================
@@ -24,3 +24,8 @@ test('haddockForeignTest',
[ignore_stdout, ignore_stderr, req_haddock, extra_files(['./haddock-th-foreign-repro/A.hs', './haddock-th-foreign-repro/B.hs', './haddock-th-foreign-repro/F.hs', './haddock-th-foreign-repro/arith.c'])],
makefile_test,
['haddockForeignTest'])
+
+test('T26114',
+ [ignore_stderr, req_haddock, extra_files(['T26114.hs'])],
+ makefile_test,
+ ['T26114'])
=====================================
testsuite/tests/polykinds/T14172.stderr
=====================================
@@ -1,6 +1,6 @@
T14172.hs:7:46: error: [GHC-88464]
- • Found type wildcard ‘_’ standing for ‘a'1 :: k0’
- Where: ‘k0’ is an ambiguous type variable
+ • Found type wildcard ‘_’ standing for ‘a'1 :: k30’
+ Where: ‘k30’ is an ambiguous type variable
‘a'1’ is an ambiguous type variable
To use the inferred type, enable PartialTypeSignatures
• In the first argument of ‘h’, namely ‘_’
=====================================
utils/haddock/CHANGES.md
=====================================
@@ -1,6 +1,8 @@
## Changes in 2.32.0
* Add highlighting for inline-code-blocks (sections enclosed in @'s)
+ * Fix missing documentation for orphan instances from other packages.
+
* Add incremental mode to support rendering documentation one module at a time.
* The flag `--no-compilation` has been added. This flag causes Haddock to avoid
=====================================
utils/haddock/haddock-api/src/Haddock/Interface/AttachInstances.hs
=====================================
@@ -93,7 +93,10 @@ attachInstances expInfo ifaces instIfaceMap isOneShot = do
, fromOrig == Just True || not (null reExp)
]
mods_to_load = moduleSetElts mods
- mods_visible = mkModuleSet $ map ifaceMod ifaces
+ -- We need to ensure orphans in modules outside of this package are included.
+ -- See https://gitlab.haskell.org/ghc/ghc/-/issues/25147
+ -- and https://gitlab.haskell.org/ghc/ghc/-/issues/26079
+ mods_visible = mkModuleSet $ concatMap (liftA2 (:) ifaceMod ifaceOrphanDeps) ifaces
(_msgs, mb_index) <- do
hsc_env <- getSession
=====================================
utils/haddock/haddock-api/src/Haddock/Interface/Create.hs
=====================================
@@ -59,6 +59,7 @@ import GHC.Types.Name.Set
import GHC.Types.SafeHaskell
import qualified GHC.Types.SrcLoc as SrcLoc
import qualified GHC.Types.Unique.Map as UniqMap
+import GHC.Unit.Module.Deps (dep_orphs)
import GHC.Unit.Module.ModIface
import GHC.Unit.State (PackageName (..), UnitState)
import GHC.Utils.Outputable (SDocContext)
@@ -270,6 +271,7 @@ createInterface1' flags unit_state dflags hie_file mod_iface ifaces inst_ifaces
, ifaceVisibleExports = visible_names
, ifaceFixMap = fixities
, ifaceInstances = instances
+ , ifaceOrphanDeps = dep_orphs $ mi_deps mod_iface
, ifaceOrphanInstances = [] -- Filled in attachInstances
, ifaceRnOrphanInstances = [] -- Filled in renameInterfaceRn
, ifaceHaddockCoverage = coverage
=====================================
utils/haddock/haddock-api/src/Haddock/Interface/LexParseRn.hs
=====================================
@@ -155,6 +155,7 @@ rename sDocContext renamer = rn
| otherwise = isTermVarOrFieldNameSpace
typeNsChoices
| isDataOcc occ = isTcClsNameSpace
+ | isSymOcc occ = isTcClsNameSpace
| otherwise = isTvNameSpace
-- Generate the choices for the possible kind of thing this
-- is. We narrow down the possibilities with the namespace (if
=====================================
utils/haddock/haddock-api/src/Haddock/Interface/Rename.hs
=====================================
@@ -104,6 +104,7 @@ renameInterface dflags ignoreSet renamingEnv warnings hoogle iface = do
&& isExternalName name
&& not (isBuiltInSyntax name)
&& not (isTyVarName name)
+ && not (isDerivedOccName $ nameOccName name)
&& Exact name /= eqTyCon_RDR
-- Must not be in the set of ignored symbols for the module or the
-- unqualified ignored symbols
=====================================
utils/haddock/haddock-api/src/Haddock/Types.hs
=====================================
@@ -131,6 +131,9 @@ data Interface = Interface
-- Names from modules that are entirely re-exported don't count as visible.
, ifaceInstances :: [ClsInst]
-- ^ Instances exported by the module.
+ , ifaceOrphanDeps :: [Module]
+ -- ^ The list of modules to check for orphan instances if this module is
+ -- imported.
, ifaceOrphanInstances :: [DocInstance GhcRn]
-- ^ Orphan instances
, ifaceRnOrphanInstances :: [DocInstance DocNameI]
=====================================
utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs
=====================================
@@ -1,3 +1,4 @@
+{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ViewPatterns #-}
@@ -28,6 +29,7 @@ import Control.Applicative
import Control.Arrow (first)
import Control.Monad
import Data.Char (chr, isAlpha, isSpace, isUpper)
+import Data.Functor (($>))
import Data.List (elemIndex, intercalate, intersperse, unfoldr)
import Data.Maybe (fromMaybe, mapMaybe)
import Data.Monoid
@@ -186,11 +188,29 @@ specialChar = "_/<@\"&'`#[ "
-- to ensure that we have already given a chance to more meaningful parsers
-- before capturing their characters.
string' :: Parser (DocH mod a)
-string' = DocString . unescape . T.unpack <$> takeWhile1_ (`notElem` specialChar)
+string' =
+ DocString
+ <$> ((:) <$> rawOrEscChar "" <*> many (rawOrEscChar "(["))
+ -- After the first character, stop for @\(@ or @\[@ math starters. (The
+ -- first character won't start a valid math string because this parser
+ -- should follow math parsers. But this parser is expected to accept at
+ -- least one character from all inputs that don't start with special
+ -- characters, so the first character parser can't have the @"(["@
+ -- restriction.)
where
- unescape "" = ""
- unescape ('\\' : x : xs) = x : unescape xs
- unescape (x : xs) = x : unescape xs
+ -- | Parse a single logical character, either raw or escaped. Don't accept
+ -- escaped characters from the argument string.
+ rawOrEscChar :: [Char] -> Parser Char
+ rawOrEscChar restrictedEscapes = try $ Parsec.noneOf specialChar >>= \case
+ -- Handle backslashes:
+ -- - Fail on forbidden escape characters.
+ -- - Non-forbidden characters: simply unescape, e.g. parse "\b" as 'b',
+ -- - Trailing backslash: treat it as a raw backslash, not an escape
+ -- sequence. (This is the logic that this parser followed when this
+ -- comment was written; it is not necessarily intentional but now I
+ -- don't want to break anything relying on it.)
+ '\\' -> Parsec.noneOf restrictedEscapes <|> Parsec.eof $> '\\'
+ c -> pure c
-- | Skips a single special character and treats it as a plain string.
-- This is done to skip over any special characters belonging to other
@@ -795,31 +815,33 @@ stripSpace = fromMaybe <*> mapM strip'
-- | Parses examples. Examples are a paragraph level entity (separated by an empty line).
-- Consecutive examples are accepted.
examples :: Parser (DocH mod a)
-examples = DocExamples <$> (many (try (skipHorizontalSpace *> "\n")) *> go)
+examples = DocExamples <$> (many (try (skipHorizontalSpace *> "\n")) *> go Nothing)
where
- go :: Parser [Example]
- go = do
+ go :: Maybe Text -> Parser [Example]
+ go mbInitialIndent = do
prefix <- takeHorizontalSpace <* ">>>"
+ initialIndent <- maybe takeHorizontalSpace pure mbInitialIndent
expr <- takeLine
- (rs, es) <- resultAndMoreExamples
- return (makeExample prefix expr rs : es)
+ (rs, es) <- resultAndMoreExamples (Just initialIndent)
+ return (makeExample prefix initialIndent expr rs : es)
+
+ resultAndMoreExamples :: Maybe Text -> Parser ([Text], [Example])
+ resultAndMoreExamples mbInitialIndent = choice' [moreExamples, result, pure ([], [])]
where
- resultAndMoreExamples :: Parser ([Text], [Example])
- resultAndMoreExamples = choice' [moreExamples, result, pure ([], [])]
- where
- moreExamples :: Parser ([Text], [Example])
- moreExamples = (,) [] <$> go
+ moreExamples :: Parser ([Text], [Example])
+ moreExamples = (,) [] <$> go mbInitialIndent
- result :: Parser ([Text], [Example])
- result = first . (:) <$> nonEmptyLine <*> resultAndMoreExamples
+ result :: Parser ([Text], [Example])
+ result = first . (:) <$> nonEmptyLine <*> resultAndMoreExamples Nothing
- makeExample :: Text -> Text -> [Text] -> Example
- makeExample prefix expression res =
- Example (T.unpack (T.strip expression)) result
+ makeExample :: Text -> Text -> Text -> [Text] -> Example
+ makeExample prefix indent expression res =
+ Example (T.unpack (tryStripIndent (T.stripEnd expression))) result
where
result = map (T.unpack . substituteBlankLine . tryStripPrefix) res
tryStripPrefix xs = fromMaybe xs (T.stripPrefix prefix xs)
+ tryStripIndent = liftA2 fromMaybe T.stripStart (T.stripPrefix indent)
substituteBlankLine "<BLANKLINE>" = ""
substituteBlankLine xs = xs
=====================================
utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs
=====================================
@@ -284,6 +284,13 @@ spec = do
it "supports title for deprecated picture syntax" $ do
"<<b a z>>" `shouldParseTo` image "b" "a z"
+ context "when parsing inline math" $ do
+ it "accepts inline math immediately after punctuation" $ do
+ "(\\(1 + 2 = 3\\) is an example of addition)"
+ `shouldParseTo` "("
+ <> DocMathInline "1 + 2 = 3"
+ <> " is an example of addition)"
+
context "when parsing display math" $ do
it "accepts markdown syntax for display math containing newlines" $ do
"\\[\\pi\n\\pi\\]" `shouldParseTo` DocMathDisplay "\\pi\n\\pi"
@@ -864,6 +871,29 @@ spec = do
it "accepts unicode in examples" $ do
">>> 灼眼\nシャナ" `shouldParseTo` DocExamples [Example "灼眼" ["シャナ"]]
+ it "preserves indentation in consecutive example lines" $ do
+ unlines
+ [ ">>> line 1"
+ , ">>> line 2"
+ , ">>> line 3"
+ ]
+ `shouldParseTo` DocExamples
+ [ Example "line 1" []
+ , Example " line 2" []
+ , Example "line 3" []
+ ]
+
+ it "resets indentation after results" $ do
+ unlines
+ [ ">>> line 1"
+ , "result"
+ , ">>> line 2"
+ ]
+ `shouldParseTo` DocExamples
+ [ Example "line 1" ["result"]
+ , Example "line 2" []
+ ]
+
context "when prompt is prefixed by whitespace" $ do
it "strips the exact same amount of whitespace from result lines" $ do
unlines
=====================================
utils/haddock/haddock-test/src/Test/Haddock/Config.hs
=====================================
@@ -262,6 +262,7 @@ baseDependencies ghcPath = do
pkgs =
[ "array"
, "base"
+ , "deepseq"
, "ghc-prim"
, "process"
, "template-haskell"
=====================================
utils/haddock/html-test/ref/Bug1004.html
=====================================
@@ -797,7 +797,61 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Alternative:8"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:NFData1:8"
+ ></span
+ > <span class="breakable"
+ >(<span class="unbreakable"
+ ><a href="#" title="Control.DeepSeq"
+ >NFData1</a
+ > f</span
+ >, <span class="unbreakable"
+ ><a href="#" title="Control.DeepSeq"
+ >NFData1</a
+ > g</span
+ >)</span
+ > => <a href="#" title="Control.DeepSeq"
+ >NFData1</a
+ > (<a href="#" title="Bug1004"
+ >Product</a
+ > f g)</span
+ > <a href="#" class="selflink"
+ >#</a
+ ></td
+ ><td class="doc"
+ ><p
+ ><em
+ >Since: deepseq-1.4.3.0</em
+ ></p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><details id="i:id:Product:NFData1:8"
+ ><summary class="hide-when-js-enabled"
+ >Instance details</summary
+ ><p
+ >Defined in <a href="#"
+ >Control.DeepSeq</a
+ ></p
+ > <div class="subs methods"
+ ><p class="caption"
+ >Methods</p
+ ><p class="src"
+ ><a href="#"
+ >liftRnf</a
+ > :: (a -> ()) -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> () <a href="#" class="selflink"
+ >#</a
+ ></p
+ ></div
+ ></details
+ ></td
+ ></tr
+ ><tr
+ ><td class="src clearfix"
+ ><span class="inst-left"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Alternative:9"
></span
> (<a href="#" title="Control.Applicative"
>Alternative</a
@@ -820,7 +874,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Alternative:8"
+ ><details id="i:id:Product:Alternative:9"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -877,7 +931,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Applicative:9"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Applicative:10"
></span
> (<a href="#" title="Control.Applicative"
>Applicative</a
@@ -900,7 +954,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Applicative:9"
+ ><details id="i:id:Product:Applicative:10"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -973,7 +1027,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Functor:10"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Functor:11"
></span
> (<a href="#" title="Control.Monad"
>Functor</a
@@ -996,7 +1050,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Functor:10"
+ ><details id="i:id:Product:Functor:11"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1033,7 +1087,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Monad:11"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Monad:12"
></span
> (<a href="#" title="Control.Monad"
>Monad</a
@@ -1056,7 +1110,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Monad:11"
+ ><details id="i:id:Product:Monad:12"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1105,7 +1159,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:MonadPlus:12"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:MonadPlus:13"
></span
> (<a href="#" title="Control.Monad"
>MonadPlus</a
@@ -1128,7 +1182,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:MonadPlus:12"
+ ><details id="i:id:Product:MonadPlus:13"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1165,7 +1219,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:MonadFix:13"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:MonadFix:14"
></span
> (<a href="#" title="Control.Monad.Fix"
>MonadFix</a
@@ -1188,7 +1242,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:MonadFix:13"
+ ><details id="i:id:Product:MonadFix:14"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1215,7 +1269,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:MonadZip:14"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:MonadZip:15"
></span
> (<a href="#" title="Control.Monad.Zip"
>MonadZip</a
@@ -1238,7 +1292,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:MonadZip:14"
+ ><details id="i:id:Product:MonadZip:15"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1291,7 +1345,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Foldable:15"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Foldable:16"
></span
> (<a href="#" title="Data.Foldable"
>Foldable</a
@@ -1314,7 +1368,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Foldable:15"
+ ><details id="i:id:Product:Foldable:16"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1489,7 +1543,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Traversable:16"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Traversable:17"
></span
> (<a href="#" title="Data.Traversable"
>Traversable</a
@@ -1512,7 +1566,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Traversable:16"
+ ><details id="i:id:Product:Traversable:17"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1577,7 +1631,65 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Monoid:17"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:NFData:18"
+ ></span
+ > <span class="breakable"
+ >(<span class="unbreakable"
+ ><a href="#" title="Control.DeepSeq"
+ >NFData</a
+ > (f a)</span
+ >, <span class="unbreakable"
+ ><a href="#" title="Control.DeepSeq"
+ >NFData</a
+ > (g a)</span
+ >)</span
+ > => <a href="#" title="Control.DeepSeq"
+ >NFData</a
+ > (<a href="#" title="Bug1004"
+ >Product</a
+ > f g a)</span
+ > <a href="#" class="selflink"
+ >#</a
+ ></td
+ ><td class="doc"
+ ><p
+ >Note: in <code class="inline-code"
+ >deepseq-1.5.0.0</code
+ > this instance's superclasses were changed.</p
+ ><p
+ ><em
+ >Since: deepseq-1.4.3.0</em
+ ></p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><details id="i:id:Product:NFData:18"
+ ><summary class="hide-when-js-enabled"
+ >Instance details</summary
+ ><p
+ >Defined in <a href="#"
+ >Control.DeepSeq</a
+ ></p
+ > <div class="subs methods"
+ ><p class="caption"
+ >Methods</p
+ ><p class="src"
+ ><a href="#"
+ >rnf</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> () <a href="#" class="selflink"
+ >#</a
+ ></p
+ ></div
+ ></details
+ ></td
+ ></tr
+ ><tr
+ ><td class="src clearfix"
+ ><span class="inst-left"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Monoid:19"
></span
> (<a href="#" title="Data.Monoid"
>Monoid</a
@@ -1600,7 +1712,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Monoid:17"
+ ><details id="i:id:Product:Monoid:19"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1647,7 +1759,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Semigroup:18"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Semigroup:20"
></span
> (<a href="#" title="Prelude"
>Semigroup</a
@@ -1670,7 +1782,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Semigroup:18"
+ ><details id="i:id:Product:Semigroup:20"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1723,21 +1835,235 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Data:19"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Eq:21"
></span
- > (<a href="#" title="Data.Dynamic"
- >Typeable</a
- > a, <a href="#" title="Data.Dynamic"
- >Typeable</a
- > f, <a href="#" title="Data.Dynamic"
- >Typeable</a
- > g, <a href="#" title="Data.Dynamic"
- >Typeable</a
- > k, <a href="#" title="Data.Data"
- >Data</a
- > (f a), <a href="#" title="Data.Data"
- >Data</a
- > (g a)) => <a href="#" title="Data.Data"
+ > <span class="breakable"
+ >(<span class="unbreakable"
+ ><a href="#" title="Data.Eq"
+ >Eq</a
+ > (f a)</span
+ >, <span class="unbreakable"
+ ><a href="#" title="Data.Eq"
+ >Eq</a
+ > (g a)</span
+ >)</span
+ > => <a href="#" title="Data.Eq"
+ >Eq</a
+ > (<a href="#" title="Bug1004"
+ >Product</a
+ > f g a)</span
+ > <a href="#" class="selflink"
+ >#</a
+ ></td
+ ><td class="doc"
+ ><p
+ ><em
+ >Since: base-4.18.0.0</em
+ ></p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><details id="i:id:Product:Eq:21"
+ ><summary class="hide-when-js-enabled"
+ >Instance details</summary
+ ><p
+ >Defined in <a href="#"
+ >Data.Functor.Product</a
+ ></p
+ > <div class="subs methods"
+ ><p class="caption"
+ >Methods</p
+ ><p class="src"
+ ><a href="#"
+ >(==)</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><p class="src"
+ ><a href="#"
+ >(/=)</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ></div
+ ></details
+ ></td
+ ></tr
+ ><tr
+ ><td class="src clearfix"
+ ><span class="inst-left"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Ord:22"
+ ></span
+ > <span class="breakable"
+ >(<span class="unbreakable"
+ ><a href="#" title="Data.Ord"
+ >Ord</a
+ > (f a)</span
+ >, <span class="unbreakable"
+ ><a href="#" title="Data.Ord"
+ >Ord</a
+ > (g a)</span
+ >)</span
+ > => <a href="#" title="Data.Ord"
+ >Ord</a
+ > (<a href="#" title="Bug1004"
+ >Product</a
+ > f g a)</span
+ > <a href="#" class="selflink"
+ >#</a
+ ></td
+ ><td class="doc"
+ ><p
+ ><em
+ >Since: base-4.18.0.0</em
+ ></p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><details id="i:id:Product:Ord:22"
+ ><summary class="hide-when-js-enabled"
+ >Instance details</summary
+ ><p
+ >Defined in <a href="#"
+ >Data.Functor.Product</a
+ ></p
+ > <div class="subs methods"
+ ><p class="caption"
+ >Methods</p
+ ><p class="src"
+ ><a href="#"
+ >compare</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Data.Ord"
+ >Ordering</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><p class="src"
+ ><a href="#"
+ >(<)</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><p class="src"
+ ><a href="#"
+ >(<=)</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><p class="src"
+ ><a href="#"
+ >(>)</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><p class="src"
+ ><a href="#"
+ >(>=)</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><p class="src"
+ ><a href="#"
+ >max</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><p class="src"
+ ><a href="#"
+ >min</a
+ > :: <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a -> <a href="#" title="Bug1004"
+ >Product</a
+ > f g a <a href="#" class="selflink"
+ >#</a
+ ></p
+ ></div
+ ></details
+ ></td
+ ></tr
+ ><tr
+ ><td class="src clearfix"
+ ><span class="inst-left"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Data:23"
+ ></span
+ > <span class="breakable"
+ >(<span class="unbreakable"
+ ><a href="#" title="Data.Dynamic"
+ >Typeable</a
+ > a</span
+ >, <span class="unbreakable"
+ ><a href="#" title="Data.Dynamic"
+ >Typeable</a
+ > f</span
+ >, <span class="unbreakable"
+ ><a href="#" title="Data.Dynamic"
+ >Typeable</a
+ > g</span
+ >, <span class="unbreakable"
+ ><a href="#" title="Data.Dynamic"
+ >Typeable</a
+ > k</span
+ >, <span class="unbreakable"
+ ><a href="#" title="Data.Data"
+ >Data</a
+ > (f a)</span
+ >, <span class="unbreakable"
+ ><a href="#" title="Data.Data"
+ >Data</a
+ > (g a)</span
+ >)</span
+ > => <a href="#" title="Data.Data"
>Data</a
> (<a href="#" title="Bug1004"
>Product</a
@@ -1754,7 +2080,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Data:19"
+ ><details id="i:id:Product:Data:23"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -1971,7 +2297,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Generic:20"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Generic:24"
></span
> <a href="#" title="GHC.Generics"
>Generic</a
@@ -1986,7 +2312,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Generic:20"
+ ><details id="i:id:Product:Generic:24"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -2125,7 +2451,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Read:21"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Read:25"
></span
> (<a href="#" title="Prelude"
>Read</a
@@ -2148,7 +2474,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Read:21"
+ ><details id="i:id:Product:Read:25"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -2207,7 +2533,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Show:22"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Show:26"
></span
> (<a href="#" title="Prelude"
>Show</a
@@ -2230,7 +2556,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Show:22"
+ ><details id="i:id:Product:Show:26"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -2279,195 +2605,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Eq:23"
- ></span
- > (<a href="#" title="Data.Eq"
- >Eq</a
- > (f a), <a href="#" title="Data.Eq"
- >Eq</a
- > (g a)) => <a href="#" title="Data.Eq"
- >Eq</a
- > (<a href="#" title="Bug1004"
- >Product</a
- > f g a)</span
- > <a href="#" class="selflink"
- >#</a
- ></td
- ><td class="doc"
- ><p
- ><em
- >Since: base-4.18.0.0</em
- ></p
- ></td
- ></tr
- ><tr
- ><td colspan="2"
- ><details id="i:id:Product:Eq:23"
- ><summary class="hide-when-js-enabled"
- >Instance details</summary
- ><p
- >Defined in <a href="#"
- >Data.Functor.Product</a
- ></p
- > <div class="subs methods"
- ><p class="caption"
- >Methods</p
- ><p class="src"
- ><a href="#"
- >(==)</a
- > :: <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Data.Bool"
- >Bool</a
- > <a href="#" class="selflink"
- >#</a
- ></p
- ><p class="src"
- ><a href="#"
- >(/=)</a
- > :: <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Data.Bool"
- >Bool</a
- > <a href="#" class="selflink"
- >#</a
- ></p
- ></div
- ></details
- ></td
- ></tr
- ><tr
- ><td class="src clearfix"
- ><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Ord:24"
- ></span
- > (<a href="#" title="Data.Ord"
- >Ord</a
- > (f a), <a href="#" title="Data.Ord"
- >Ord</a
- > (g a)) => <a href="#" title="Data.Ord"
- >Ord</a
- > (<a href="#" title="Bug1004"
- >Product</a
- > f g a)</span
- > <a href="#" class="selflink"
- >#</a
- ></td
- ><td class="doc"
- ><p
- ><em
- >Since: base-4.18.0.0</em
- ></p
- ></td
- ></tr
- ><tr
- ><td colspan="2"
- ><details id="i:id:Product:Ord:24"
- ><summary class="hide-when-js-enabled"
- >Instance details</summary
- ><p
- >Defined in <a href="#"
- >Data.Functor.Product</a
- ></p
- > <div class="subs methods"
- ><p class="caption"
- >Methods</p
- ><p class="src"
- ><a href="#"
- >compare</a
- > :: <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Data.Ord"
- >Ordering</a
- > <a href="#" class="selflink"
- >#</a
- ></p
- ><p class="src"
- ><a href="#"
- >(<)</a
- > :: <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Data.Bool"
- >Bool</a
- > <a href="#" class="selflink"
- >#</a
- ></p
- ><p class="src"
- ><a href="#"
- >(<=)</a
- > :: <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Data.Bool"
- >Bool</a
- > <a href="#" class="selflink"
- >#</a
- ></p
- ><p class="src"
- ><a href="#"
- >(>)</a
- > :: <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Data.Bool"
- >Bool</a
- > <a href="#" class="selflink"
- >#</a
- ></p
- ><p class="src"
- ><a href="#"
- >(>=)</a
- > :: <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Data.Bool"
- >Bool</a
- > <a href="#" class="selflink"
- >#</a
- ></p
- ><p class="src"
- ><a href="#"
- >max</a
- > :: <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a <a href="#" class="selflink"
- >#</a
- ></p
- ><p class="src"
- ><a href="#"
- >min</a
- > :: <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a -> <a href="#" title="Bug1004"
- >Product</a
- > f g a <a href="#" class="selflink"
- >#</a
- ></p
- ></div
- ></details
- ></td
- ></tr
- ><tr
- ><td class="src clearfix"
- ><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Rep1:25"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Rep1:27"
></span
> <span class="keyword"
>type</span
@@ -2490,7 +2628,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Rep1:25"
+ ><details id="i:id:Product:Rep1:27"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
@@ -2565,7 +2703,7 @@
><tr
><td class="src clearfix"
><span class="inst-left"
- ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Rep:26"
+ ><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Product:Rep:28"
></span
> <span class="keyword"
>type</span
@@ -2586,7 +2724,7 @@
></tr
><tr
><td colspan="2"
- ><details id="i:id:Product:Rep:26"
+ ><details id="i:id:Product:Rep:28"
><summary class="hide-when-js-enabled"
>Instance details</summary
><p
=====================================
utils/haddock/html-test/ref/PatternSyns.html
=====================================
@@ -308,8 +308,10 @@
></p
><div class="doc"
><p
- >Doc for (<code class="inline-code"
- >><</code
+ >Doc for (<code
+ ><a href="#" title="PatternSyns"
+ >><</a
+ ></code
>)</p
></div
><div class="subs constructors"
=====================================
utils/haddock/html-test/ref/TypeOperators.html
=====================================
@@ -48,6 +48,34 @@
><p class="caption"
>TypeOperators</p
></div
+ ><div id="description"
+ ><p class="caption"
+ >Description</p
+ ><div class="doc"
+ ><p
+ >This documentation refers to <code
+ ><a href="#" title="Data.Type.Equality"
+ >~</a
+ ></code
+ >, <code
+ ><a href="#" title="TypeOperators"
+ >:-:</a
+ ></code
+ >, <code
+ ><a href="#" title="TypeOperators"
+ >:+:</a
+ ></code
+ >, <code
+ ><a href="#" title="TypeOperators"
+ ><=></a
+ ></code
+ >, and <code
+ ><a href="#" title="TypeOperators"
+ >|||</a
+ ></code
+ >.</p
+ ></div
+ ></div
><div id="interface"
><h1
>Documentation</h1
@@ -142,6 +170,18 @@
></p
></div
><div class="top"
+ ><p class="src"
+ ><span class="keyword"
+ >type</span
+ > <a id="t:-124--124--124-" class="def"
+ >(|||)</a
+ > = <a href="#" title="Data.Either"
+ >Either</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ></div
+ ><div class="top"
><p class="src"
><a id="v:biO" class="def"
>biO</a
=====================================
utils/haddock/html-test/src/TypeOperators.hs
=====================================
@@ -1,5 +1,6 @@
{-# LANGUAGE Haskell2010 #-}
{-# LANGUAGE TypeOperators, GADTs, MultiParamTypeClasses, FlexibleContexts #-}
+-- | This documentation refers to '~', ':-:', ':+:', '<=>', and '|||'.
module TypeOperators where
data a :-: b
@@ -12,6 +13,8 @@ newtype (g `O` f) a = O { unO :: g (f a) }
class a <=> b
+type (|||) = Either
+
biO :: (g `O` f) a
biO = undefined
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/eced323e7b73286ec3e0db6d5cc544…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/eced323e7b73286ec3e0db6d5cc544…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/9.12.3-backports] 11 commits: x86 NCG: Make MOVD's output format explicit
by Zubin (@wz1000) 16 Sep '25
by Zubin (@wz1000) 16 Sep '25
16 Sep '25
Zubin pushed to branch wip/9.12.3-backports at Glasgow Haskell Compiler / GHC
Commits:
f6c00dac by ARATA Mizuki at 2025-09-16T14:38:18+05:30
x86 NCG: Make MOVD's output format explicit
The old design led to inference of a wrong format,
losing upper bits of a vector register.
Fixes #25659
Co-authored-by: sheaf <sam.derbyshire(a)gmail.com>
(cherry picked from commit 62760367dca36da5828875c5423109f9a5523337)
- - - - -
e0437900 by Patrick at 2025-09-16T14:38:18+05:30
Fix deadlock/loop in interface rehydration (#25858)
In #25858, GHC hangs when processing modules with class defaults due to a
circular dependency in the interface rehydration process. The deadlock/loop
occurred when eager class defaults rehydration accessed not-yet-complete module details.
To fix the immediate deadlock/loop.
`tcIfaceDefaults` is refactored, we use the class name directly from the iface
and use `forM` for lazy loading the class, which algins with the handling of other fields
of ModDetails. This laziness ensure rehydration waits for HomePackageTable (HPT) to
be updated and prevent premature evaluation of ModDetails inside `fixIO``.
As suggested by Matthew, class defaults importing is also refactored
to align with the compiler's established interface loading conventions.
- add class defaults field to ExternalPackageState (EPS).
- rehydrate and store class defaults in EPS at `loadInterface`.
- Instead of using `tcIfaceDefaults` in `tcRnImports`, we add and use
`tcGetClsDefaults` to read defaults directly from HPT or EPS
when importing modules.
Tests:
- T25858, T25858v1-2: Test class hydration in defaults
- T25858v3-4: Test type list hydration in defaults
New Note [Tricky rehydrating IfaceDefaults loop] is added.
Thanks to @sheaf (Sam), @mpickering (Matthew), and @simonpj (Simon) for their
valuable input and analysis.
Fixes #25858.
(cherry picked from commit d5ea80c6237c735eb1fb8bcce133e009df99beec)
- - - - -
4fd881a9 by sheaf at 2025-09-16T14:38:19+05:30
9.12 user's guide: NamedDefault semantic change
This commit documents a semantic change in 9.12 that takes effect as
part of the implementation of the NamedDefaults extension: defaulting
will now take place in more situations than it did before, even when
the extension is not enabled!
Fixes #25777
(cherry picked from commit 0d4d6a272f569f19ce7c723dc21b73b2e0493706)
- - - - -
7ddf44a8 by Zubin Duggal at 2025-09-16T14:38:19+05:30
QuickLook: do a shape test before unifying
This commit ensures we do a shape test before unifying. This ensures
we don't try to unify a TyVarTv with a non-tyvar, e.g.
alpha[tyv] := Int
Fixes #25950
(cherry picked from commit a4c0c8d32e8c29364062b199abe19b033e3d4381)
Co-authored-by: sheaf <sam.derbyshire(a)gmail.com>
(cherry picked from commit 91db1d51d2d53346612fe843e863cd71f8f9d338)
- - - - -
04dfd009 by Ben Gamari at 2025-09-16T14:38:19+05:30
rts/linker/LoadArchive: Use bool
Improve type precision by using `bool` instead of `int` and `StgBool`.
(cherry picked from commit 580a33536e6180ce1d623d0922f7de5c975b6b3e)
- - - - -
c497468f by Ben Gamari at 2025-09-16T14:38:19+05:30
rts/linker/LoadArchive: Don't rely on file extensions for identification
Previously archive members would be identified via their file extension,
as described in #13103. We now instead use a more principled approach,
relying on the magic number in the member's header.
As well, we refactor treatment of archive format detection to improve
code clarity and error handling.
Closes #13103.
(cherry picked from commit 76d1041dfa4b96108cfdd22b07f2b3feb424dcbe)
- - - - -
02d052f4 by Ben Gamari at 2025-09-16T14:38:19+05:30
rts/LoadArchive: Handle null terminated string tables
As of `llvm-ar` now emits filename tables terminated with null
characters instead of the usual POSIX `/\n` sequence.
Fixes #26150.
(cherry picked from commit 3b63b254cb8b1832f32751aed6d05ceaabdeb826)
- - - - -
85d64f46 by Ben Gamari at 2025-09-16T14:38:19+05:30
rts/LoadArchive: Handle string table entries terminated with /
llvm-ar appears to terminate string table entries with `/\n` [1]. This
matters in the case of thin archives, since the filename is used. In the
past this worked since `llvm-ar` would produce archives with "small"
filenames when possible. However, now it appears to always use the
string table.
[1] https://github.com/llvm/llvm-project/blob/bfb686bb5ba503e9386dc899e1ebbe248…
(cherry picked from commit 65f19293124acbc2c6493ca9c098fc74150e184a)
- - - - -
533853eb by Andreas Klebinger at 2025-09-16T14:38:19+05:30
rts: Support COFF BigObj files in archives.
(cherry picked from commit 01136779b1d4c1576c925ef673f55c81c45d8551)
- - - - -
4064ead7 by Andrew Lelechenko at 2025-09-16T14:38:19+05:30
hadrian: bump Stackage snapshot to LTS 24.2 / GHC 9.10.2
In line with #25693 we should use GHC 9.10 as a boot compiler,
while Hadrian stack.yaml was stuck on GHC 9.6.
(cherry picked from commit 57d3b4a82e97f379cc8f41d61675d8c3904f7572)
- - - - -
eced323e by Zubin Duggal at 2025-09-16T14:38:19+05:30
Prepare 9.12.3
- - - - -
51 changed files:
- compiler/GHC/CmmToAsm/X86/CodeGen.hs
- compiler/GHC/CmmToAsm/X86/Instr.hs
- compiler/GHC/CmmToAsm/X86/Ppr.hs
- compiler/GHC/Iface/Load.hs
- compiler/GHC/Iface/Make.hs
- compiler/GHC/Iface/Rename.hs
- compiler/GHC/Iface/Syntax.hs
- compiler/GHC/Iface/Tidy.hs
- compiler/GHC/IfaceToCore.hs
- compiler/GHC/IfaceToCore.hs-boot
- compiler/GHC/Rename/Names.hs
- compiler/GHC/Tc/Errors/Ppr.hs
- compiler/GHC/Tc/Errors/Types.hs
- compiler/GHC/Tc/Gen/App.hs
- compiler/GHC/Tc/Gen/Default.hs
- compiler/GHC/Tc/Gen/Export.hs
- compiler/GHC/Tc/Module.hs
- compiler/GHC/Tc/Solver.hs
- compiler/GHC/Tc/Utils/Env.hs
- compiler/GHC/Types/DefaultEnv.hs
- compiler/GHC/Types/Hint.hs
- compiler/GHC/Unit/External.hs
- compiler/GHC/Unit/Module/ModDetails.hs
- configure.ac
- docs/users_guide/9.12.1-notes.rst
- docs/users_guide/9.12.3-notes.rst
- hadrian/stack.yaml
- hadrian/stack.yaml.lock
- rts/linker/LoadArchive.c
- testsuite/driver/testlib.py
- + testsuite/tests/default/T25858.hs
- + testsuite/tests/default/T25858.stdout
- + testsuite/tests/default/T25858v1.hs
- + testsuite/tests/default/T25858v1.stdout
- + testsuite/tests/default/T25858v1_helper.hs
- + testsuite/tests/default/T25858v2.hs
- + testsuite/tests/default/T25858v2.stdout
- + testsuite/tests/default/T25858v2_helper.hs
- + testsuite/tests/default/T25858v3.hs
- + testsuite/tests/default/T25858v3.stdout
- + testsuite/tests/default/T25858v3_helper.hs
- + testsuite/tests/default/T25858v4.hs
- + testsuite/tests/default/T25858v4.stdout
- testsuite/tests/default/all.T
- testsuite/tests/polykinds/T14172.stderr
- + testsuite/tests/simd/should_run/T25659.hs
- + testsuite/tests/simd/should_run/T25659.stdout
- testsuite/tests/simd/should_run/all.T
- + testsuite/tests/typecheck/should_fail/T25950.hs
- + testsuite/tests/typecheck/should_fail/T25950.stderr
- testsuite/tests/typecheck/should_fail/all.T
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/91db1d51d2d53346612fe843e863cd…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/91db1d51d2d53346612fe843e863cd…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/fix-gen_workspace] rts: Fix alignment for gen_workspace #26334
by Stefan Schulze Frielinghaus (@stefansf) 16 Sep '25
by Stefan Schulze Frielinghaus (@stefansf) 16 Sep '25
16 Sep '25
Stefan Schulze Frielinghaus pushed to branch wip/fix-gen_workspace at Glasgow Haskell Compiler / GHC
Commits:
16b5251e by Stefan Schulze Frielinghaus at 2025-09-16T10:59:49+02:00
rts: Fix alignment for gen_workspace #26334
After a0fa4941903272c48b050d24e93eec819eff51bd bootstrap is broken on
s390x and errors out with
rts/sm/GCThread.h:207:5: error:
error: alignment of array elements is greater than element size
207 | gen_workspace gens[];
| ^~~~~~~~~~~~~
The alignment constraint is applied via the attribute to the type
gen_workspace and leaves the underlying type struct gen_workspace_
untouched. On Aarch64, x86, and s390x the struct has a size of 128
bytes. On Aarch64 and x86 the alignments of 128 and 64 are divisors of
the size, respectively, which is why the type is a viable member type
for an array. However, on s390x, the alignment is 256 and therefore is
not a divisor of the size and hence cannot be used for arrays.
Basically I see two fixes here. Either decrease the alignment
requirement on s390x, or by applying the alignment constraint on the
struct itself. The former might affect performance as noted in
a0fa4941903272c48b050d24e93eec819eff51bd. The latter introduces padding
bits whenever necessary in order to ensure that
sizeof(gen_workspace[N])==N*sizeof(gen_workspace) holds which is done by
this patch.
- - - - -
1 changed file:
- rts/sm/GCThread.h
Changes:
=====================================
rts/sm/GCThread.h
=====================================
@@ -83,7 +83,7 @@
// platforms.
#define GEN_WORKSPACE_ALIGNMENT CACHELINE_SIZE
-typedef struct gen_workspace_ {
+typedef struct ATTRIBUTE_ALIGNED(GEN_WORKSPACE_ALIGNMENT) gen_workspace_ {
generation * gen; // the gen for this workspace
struct gc_thread_ * my_gct; // the gc_thread that contains this workspace
@@ -109,7 +109,7 @@ typedef struct gen_workspace_ {
bdescr * part_list;
StgWord n_part_blocks; // count of above
StgWord n_part_words;
-} gen_workspace ATTRIBUTE_ALIGNED(GEN_WORKSPACE_ALIGNMENT);
+} gen_workspace;
/* ----------------------------------------------------------------------------
GC thread object
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/16b5251e2ea0bf5f2a95f6fb7047b1e…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/16b5251e2ea0bf5f2a95f6fb7047b1e…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc] Pushed new branch wip/fix-gen_workspace
by Stefan Schulze Frielinghaus (@stefansf) 16 Sep '25
by Stefan Schulze Frielinghaus (@stefansf) 16 Sep '25
16 Sep '25
Stefan Schulze Frielinghaus pushed new branch wip/fix-gen_workspace at Glasgow Haskell Compiler / GHC
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/fix-gen_workspace
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/9.12.3-backports] QuickLook: do a shape test before unifying
by Zubin (@wz1000) 16 Sep '25
by Zubin (@wz1000) 16 Sep '25
16 Sep '25
Zubin pushed to branch wip/9.12.3-backports at Glasgow Haskell Compiler / GHC
Commits:
91db1d51 by Zubin Duggal at 2025-09-16T08:52:56+00:00
QuickLook: do a shape test before unifying
This commit ensures we do a shape test before unifying. This ensures
we don't try to unify a TyVarTv with a non-tyvar, e.g.
alpha[tyv] := Int
Fixes #25950
(cherry picked from commit a4c0c8d32e8c29364062b199abe19b033e3d4381)
Co-authored-by: sheaf <sam.derbyshire(a)gmail.com>
- - - - -
4 changed files:
- compiler/GHC/Tc/Gen/App.hs
- + testsuite/tests/typecheck/should_fail/T25950.hs
- + testsuite/tests/typecheck/should_fail/T25950.stderr
- testsuite/tests/typecheck/should_fail/all.T
Changes:
=====================================
compiler/GHC/Tc/Gen/App.hs
=====================================
@@ -2040,6 +2040,10 @@ qlUnify ty1 ty2
go_flexi1 kappa ty2 -- ty2 is zonked
| -- See Note [QuickLook unification] (UQL1)
simpleUnifyCheck UC_QuickLook kappa ty2
+ , checkTopShape (metaTyVarInfo kappa) ty2
+ -- NB: don't forget to do a shape check, as we might be dealing
+ -- with an ordinary metavariable (and not a quick-look instantiation variable).
+ -- (Forgetting this led to #25950.)
= do { co <- unifyKind (Just (TypeThing ty2)) ty2_kind kappa_kind
-- unifyKind: see (UQL2) in Note [QuickLook unification]
-- and (MIV2) in Note [Monomorphise instantiation variables]
=====================================
testsuite/tests/typecheck/should_fail/T25950.hs
=====================================
@@ -0,0 +1,6 @@
+{-# LANGUAGE PartialTypeSignatures #-}
+
+module T25950 where
+
+fails :: _ => a
+fails = id $ ()
=====================================
testsuite/tests/typecheck/should_fail/T25950.stderr
=====================================
@@ -0,0 +1,9 @@
+T25950.hs:6:9: error: [GHC-25897]
+ • Couldn't match expected type ‘a’ with actual type ‘()’
+ ‘a’ is a rigid type variable bound by
+ the inferred type of fails :: a
+ at T25950.hs:5:1-15
+ • In the expression: id $ ()
+ In an equation for ‘fails’: fails = id $ ()
+ • Relevant bindings include fails :: a (bound at T25950.hs:6:1)
+
=====================================
testsuite/tests/typecheck/should_fail/all.T
=====================================
@@ -724,6 +724,7 @@ test('T17594c', normal, compile_fail, [''])
test('T17594d', normal, compile_fail, [''])
test('T17594g', normal, compile_fail, [''])
+test('T25950', normal, compile_fail, [''])
test('T24470a', normal, compile_fail, [''])
test('T24553', normal, compile_fail, [''])
test('T23739b', normal, compile_fail, [''])
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/91db1d51d2d53346612fe843e863cd7…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/91db1d51d2d53346612fe843e863cd7…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/romes/hadrian-cross-stage2-rebase_SVEN_FIXED] Calculate "RTS ways"
by Sven Tennie (@supersven) 16 Sep '25
by Sven Tennie (@supersven) 16 Sep '25
16 Sep '25
Sven Tennie pushed to branch wip/romes/hadrian-cross-stage2-rebase_SVEN_FIXED at Glasgow Haskell Compiler / GHC
Commits:
a5449ca9 by Sven Tennie at 2025-09-16T05:49:35+00:00
Calculate "RTS ways"
The static string doesn't reflect what GHC provides in tests.
- - - - -
1 changed file:
- hadrian/src/Rules/Generate.hs
Changes:
=====================================
hadrian/src/Rules/Generate.hs
=====================================
@@ -24,6 +24,7 @@ import BindistConfig
import GHC.Toolchain as Toolchain hiding (HsCpp(HsCpp))
import GHC.Platform.ArchOS
+import qualified Data.Set as Set
-- | Track this file to rebuild generated files whenever it changes.
trackGenerateHs :: Expr ()
@@ -492,9 +493,7 @@ generateSettings settingsFile = do
-- Hard-coded as Cabal queries these to determine way support and we
-- need to always advertise all ways when bootstrapping.
-- The settings file is generated at install time when installing a bindist.
- , ("RTS ways", return "v p p p_dyn")
- -- ROMES:TODO: This is what we had previously? Double check we want this hardcoded list.
- -- , ("RTS ways", escapeArgs . map show . Set.toList <$> getRtsWays)
+ , ("RTS ways", unwords . map show . Set.toList <$> getRtsWays)
, ("Relative Global Package DB", pure rel_pkg_db)
, ("base unit-id", pure base_unit_id)
]
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a5449ca95261320942a983e007ec5ea…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/a5449ca95261320942a983e007ec5ea…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/az/ghc-cpp] 154 commits: Move ModuleGraph into UnitEnv
by Alan Zimmerman (@alanz) 15 Sep '25
by Alan Zimmerman (@alanz) 15 Sep '25
15 Sep '25
Alan Zimmerman pushed to branch wip/az/ghc-cpp at Glasgow Haskell Compiler / GHC
Commits:
0fb37893 by Matthew Pickering at 2025-06-23T13:55:10-04:00
Move ModuleGraph into UnitEnv
The ModuleGraph is a piece of information associated with the
ExternalPackageState and HomeUnitGraph. Therefore we should store it
inside the HomeUnitEnv.
- - - - -
3bf6720e by soulomoon at 2025-06-23T13:55:52-04:00
Remove hptAllFamInstances usage during upsweep
Fixes #26118
This change eliminates the use of hptAllFamInstances during the upsweep phase,
as it could access non-below modules from the home package table.
The following updates were made:
* Updated checkFamInstConsistency to accept an explicit ModuleEnv FamInstEnv
parameter and removed the call to hptAllFamInstances.
* Adjusted hugInstancesBelow so we can construct ModuleEnv FamInstEnv
from its result,
* hptAllFamInstances and allFamInstances functions are removed.
- - - - -
83ee7b78 by Ben Gamari at 2025-06-24T05:02:07-04:00
configure: Don't force value of OTOOL, etc. if not present
Previously if `otool` and `install_name_tool` were not present they
would be overridden by `fp_settings.m4`. This logic was introduced in
4ff93292243888545da452ea4d4c1987f2343591 without explanation.
- - - - -
9329c9e1 by Ben Gamari at 2025-06-24T05:02:07-04:00
ghc-toolchain: Add support for otool, install_name_tool
Fixes part of ghc#23675.
- - - - -
25f5c998 by Ben Gamari at 2025-06-24T05:02:08-04:00
ghc-toolchain: Add support for llc, opt, llvm-as
Fixes #23675.
- - - - -
51d150dd by Rodrigo Mesquita at 2025-06-24T05:02:08-04:00
hadrian: Use settings-use-distro-mingw directly
The type `ToolchainSetting` only made sense when we had more settings to
fetch from the system config file. Even then "settings-use-distro-mingw"
is arguably not a toolchain setting.
With the fix for #23675, all toolchain tools were moved to the
`ghc-toolchain` `Toolchain` format. Therefore, we can inline
`settings-use-distro-mingw` accesses and delete `ToolchainSetting`.
- - - - -
dcf68a83 by Rodrigo Mesquita at 2025-06-24T05:02:08-04:00
configure: Check LlvmTarget exists for LlvmAsFlags
If LlvmTarget was empty, LlvmAsFlags would be just "--target=".
If it is empty now, simply keep LlvmAsFlags empty.
ghc-toolchain already does this right. This fix makes the two
configurations match up.
- - - - -
580a3353 by Ben Gamari at 2025-06-24T05:02:51-04:00
rts/linker/LoadArchive: Use bool
Improve type precision by using `bool` instead of `int` and `StgBool`.
- - - - -
76d1041d by Ben Gamari at 2025-06-24T05:02:51-04:00
rts/linker/LoadArchive: Don't rely on file extensions for identification
Previously archive members would be identified via their file extension,
as described in #13103. We now instead use a more principled approach,
relying on the magic number in the member's header.
As well, we refactor treatment of archive format detection to improve
code clarity and error handling.
Closes #13103.
- - - - -
4b748a99 by Teo Camarasu at 2025-06-24T15:31:07-04:00
template-haskell: improve changelog
stable -> more stable, just to clarify that this interface isn't fully stable.
errornously -> mistakenly: I typod this and also let's go for a simpler word
- - - - -
e358e477 by Sylvain Henry at 2025-06-24T15:31:58-04:00
Bump stack resolver to use GHC 9.6.7
Cf #26139
- - - - -
4bf5eb63 by fendor at 2025-06-25T17:05:43-04:00
Teach `:reload` about multiple home units
`:reload` needs to lookup the `ModuleName` and must not assume the given
`ModuleName` is in the current `HomeUnit`.
We add a new utility function which allows us to find a `HomeUnitModule`
instead of a `Module`.
Further, we introduce the `GhciCommandError` type which can be used to
abort the execution of a GHCi command.
This error is caught and printed in a human readable fashion.
- - - - -
b3d97bb3 by fendor at 2025-06-25T17:06:25-04:00
Implement `-fno-load-initial-targets` flag
We add the new flag `-fno-load-initial-targets` which doesn't load all `Target`s
immediately but only computes the module graph for all `Target`s.
The user can then decide to load modules from that module graph using
the syntax:
ghci> :reload <Mod>
This will load everything in the module graph up to `Mod`.
The user can return to the initial state by using the builtin target
`none` to unload all modules.
ghci> :reload none
Is in principle identical to starting a new session with the
`-fno-load-initial-targets` flag.
The `-fno-load-initial-targets` flag allows for faster startup time of GHCi when a
user has lots of `Target`s.
We additionally extend the `:reload` command to accept multiple
`ModuleName`s. For example:
ghci> :reload <Mod1> <Mod2>
Loads all modules up to the modules `Mod1` and `Mod2`.
- - - - -
49f44e52 by Teo Camarasu at 2025-06-26T04:19:51-04:00
Expose ghc-internal unit id through the settings file
This in combination with the unit id of the compiler library allows
cabal to know of the two unit ids that should not be reinstalled (in
specific circumstances) as:
- when using plugins, we want to link against exactly the compiler unit
id
- when using TemplateHaskell we want to link against exactly the package
that contains the TemplateHaskell interfaces, which is `ghc-internal`
See: <https://github.com/haskell/cabal/issues/10087>
Resolves #25282
- - - - -
499c4efe by Bryan Richter at 2025-06-26T04:20:33-04:00
CI: Fix and clean up capture of timings
* Fixes the typo that caused 'cat ci-timings' to report "no such file or
directory"
* Gave ci_timings.txt a file extension so it may play better with other
systems
* Fixed the use of time_it so all times are recorded
* Fixed time_it to print name along with timing
- - - - -
86c90c9e by Bryan Richter at 2025-06-26T04:20:33-04:00
CI: Update collapsible section usage
The syntax apparently changed at some point.
- - - - -
04308ee4 by Bryan Richter at 2025-06-26T04:20:33-04:00
CI: Add more collapsible sections
- - - - -
6ac906a1 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
GHC-CPP: first rough proof of concept
Processes
#define FOO
#ifdef FOO
x = 1
#endif
Into
[ITcppIgnored [L loc ITcppDefine]
,ITcppIgnored [L loc ITcppIfdef]
,ITvarid "x"
,ITequal
,ITinteger (IL {il_text = SourceText "1", il_neg = False, il_value = 1})
,ITcppIgnored [L loc ITcppEndif]
,ITeof]
In time, ITcppIgnored will be pushed into a comment
- - - - -
fe321296 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Tidy up before re-visiting the continuation mechanic
- - - - -
e02bec42 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Switch preprocessor to continuation passing style
Proof of concept, needs tidying up
- - - - -
44112223 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Small cleanup
- - - - -
b94f4af1 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Get rid of some cruft
- - - - -
175d73a2 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Starting to integrate.
Need to get the pragma recognised and set
- - - - -
2bf717e7 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Make cppTokens extend to end of line, and process CPP comments
- - - - -
1b23c156 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Remove unused ITcppDefined
- - - - -
b6d668e4 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Allow spaces between # and keyword for preprocessor directive
- - - - -
2b4dbf6f by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Process CPP continuation lines
They are emited as separate ITcppContinue tokens.
Perhaps the processing should be more like a comment, and keep on
going to the end.
BUT, the last line needs to be slurped as a whole.
- - - - -
c03d85cb by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Accumulate CPP continuations, process when ready
Can be simplified further, we only need one CPP token
- - - - -
be8490b3 by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Simplify Lexer interface. Only ITcpp
We transfer directive lines through it, then parse them from scratch
in the preprocessor.
- - - - -
4effc38a by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Deal with directive on last line, with no trailing \n
- - - - -
1ca0e44c by Alan Zimmerman at 2025-06-26T18:37:53+01:00
Start parsing and processing the directives
- - - - -
f0bc133e by Alan Zimmerman at 2025-06-26T18:37:54+01:00
Prepare for processing include files
- - - - -
36cd4957 by Alan Zimmerman at 2025-06-26T18:37:54+01:00
Move PpState into PreProcess
And initParserState, initPragState too
- - - - -
ebbceda2 by Alan Zimmerman at 2025-06-26T18:37:54+01:00
Process nested include files
Also move PpState out of Lexer.x, so it is easy to evolve it in a ghci
session, loading utils/check-cpp/Main.hs
- - - - -
4b141ac7 by Alan Zimmerman at 2025-06-26T18:37:54+01:00
Split into separate files
- - - - -
08df4a1c by Alan Zimmerman at 2025-06-26T18:37:54+01:00
Starting on expression parser.
But it hangs. Time for Text.Parsec.Expr
- - - - -
70bd2d95 by Alan Zimmerman at 2025-06-26T18:37:54+01:00
Start integrating the ghc-cpp work
From https://github.com/alanz/ghc-cpp
- - - - -
fd93d551 by Alan Zimmerman at 2025-06-26T18:37:54+01:00
WIP
- - - - -
84b0c99c by Alan Zimmerman at 2025-06-26T18:37:54+01:00
Fixup after rebase
- - - - -
6ce804b2 by Alan Zimmerman at 2025-06-26T18:38:57+01:00
WIP
- - - - -
c7102f6c by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Fixup after rebase, including all tests pass
- - - - -
d68b4ebc by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Change pragma usage to GHC_CPP from GhcCPP
- - - - -
d5a3082b by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Some comments
- - - - -
ce3fa6b2 by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Reformat
- - - - -
4a3e884b by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Delete unused file
- - - - -
e72ee597 by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Rename module Parse to ParsePP
- - - - -
d73ef7ce by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Clarify naming in the parser
- - - - -
32a10684 by Alan Zimmerman at 2025-06-26T18:39:01+01:00
WIP. Switching to alex/happy to be able to work in-tree
Since Parsec is not available
- - - - -
21d7ac3f by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Layering is now correct
- GHC lexer, emits CPP tokens
- accumulated in Preprocessor state
- Lexed by CPP lexer, CPP command extracted, tokens concated with
spaces (to get rid of token pasting via comments)
- if directive lexed and parsed by CPP lexer/parser, and evaluated
- - - - -
4bc73df1 by Alan Zimmerman at 2025-06-26T18:39:01+01:00
First example working
Loading Example1.hs into ghci, getting the right results
```
{-# LANGUAGE GHC_CPP #-}
module Example1 where
y = 3
x =
"hello"
"bye now"
foo = putStrLn x
```
- - - - -
f7526d16 by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Rebase, and all tests pass except whitespace for generated parser
- - - - -
e94212c9 by Alan Zimmerman at 2025-06-26T18:39:01+01:00
More plumbing. Ready for testing tomorrow.
- - - - -
08215abd by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Proress. Renamed module State from Types
And at first blush it seems to handle preprocessor scopes properly.
- - - - -
5afc16ba by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Insert basic GHC version macros into parser
__GLASGOW_HASKELL__
__GLASGOW_HASKELL_FULL_VERSION__
__GLASGOW_HASKELL_PATCHLEVEL1__
__GLASGOW_HASKELL_PATCHLEVEL2__
- - - - -
6363a3f1 by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Re-sync check-cpp for easy ghci work
- - - - -
ffaf09bf by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Get rid of warnings
- - - - -
616fcf5a by Alan Zimmerman at 2025-06-26T18:39:01+01:00
Rework macro processing, in check-cpp
Macros kept at the top level, looked up via name, multiple arity
versions per name can be stored
- - - - -
3828a951 by Alan Zimmerman at 2025-06-26T18:39:01+01:00
WIP. Can crack arguments for #define
Next step it to crack out args in an expansion
- - - - -
8f8dbdb1 by Alan Zimmerman at 2025-06-26T18:39:01+01:00
WIP on arg parsing.
- - - - -
b4f72620 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Progress. Still screwing up nested parens.
- - - - -
84a649d9 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Seems to work, but has redundant code
- - - - -
facdd19c by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Remove redundant code
- - - - -
36c7705d by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Reformat
- - - - -
1f8dc622 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Expand args, single pass
Still need to repeat until fixpoint
- - - - -
7474547d by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Fixed point expansion
- - - - -
5c2944a9 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Sync the playground to compiler
- - - - -
58670a3f by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Working on dumping the GHC_CPP result
But We need to keep the BufSpan in a comment
- - - - -
2c2e5d44 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Keep BufSpan in queued comments in GHC.Parser.Lexer
- - - - -
a3455dd7 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Getting close to being able to print the combined tokens
showing what is in and what is out
- - - - -
6ad166ec by Alan Zimmerman at 2025-06-26T18:39:02+01:00
First implementation of dumpGhcCpp.
Example output
First dumps all macros in the state, then the source, showing which
lines are in and which are out
------------------------------
- |#define FOO(A,B) A + B
- |#define FOO(A,B,C) A + B + C
- |#if FOO(1,FOO(3,4)) == 8
- |-- a comment
|x = 1
- |#else
- |x = 5
- |#endif
- - - - -
907aa1d6 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Clean up a bit
- - - - -
c41f6787 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Add -ddump-ghc-cpp option and a test based on it
- - - - -
c9c55897 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Restore Lexer.x rules, we need them for continuation lines
- - - - -
0e5ee662 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Lexer.x: trying to sort out the span for continuations
- We need to match on \n at the end of the line
- We cannot simply back up for it
- - - - -
69f140f3 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Inserts predefined macros. But does not dump properly
Because the cpp tokens have a trailing newline
- - - - -
a7375551 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Remove unnecessary LExer rules
We *need* the ones that explicitly match to the end of the line.
- - - - -
4c478d03 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Generate correct span for ITcpp
Dump now works, except we do not render trailing `\` for continuation
lines. This is good enough for use in test output.
- - - - -
5eb2bd28 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Reduce duplication in lexer
- - - - -
ff8cf54b by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Tweaks
- - - - -
e110292d by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Insert min_version predefined macros into state
The mechanism now works. Still need to flesh out the full set.
- - - - -
f8010f34 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Trying my alternative pragma syntax.
It works, but dumpGhcCpp is broken, I suspect from the ITcpp token
span update.
- - - - -
bd3b86a3 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Pragma extraction now works, with both CPP and GHC_CPP
For the following
{-# LANGUAGE CPP #-}
#if __GLASGOW_HASKELL__ >= 913
{-# LANGUAGE GHC_CPP #-}
#endif
We will enable GHC_CPP only
- - - - -
877b0918 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Remove some tracing
- - - - -
8b6e6e7e by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Fix test exes for changes
- - - - -
e15dc78d by Alan Zimmerman at 2025-06-26T18:39:02+01:00
For GHC_CPP tests, normalise config-time-based macros
- - - - -
c1c6d5fc by Alan Zimmerman at 2025-06-26T18:39:02+01:00
WIP
- - - - -
63bd3393 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
WIP again. What is wrong?
- - - - -
62d77eb8 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Revert to dynflags for normal not pragma lexing
- - - - -
368205f2 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Working on getting check-exact to work properly
- - - - -
599857bf by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Passes CppCommentPlacement test
- - - - -
94ea2764 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Starting on exact printing with GHC_CPP
While overriding normal CPP
- - - - -
973edb55 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Correctly store CPP ignored tokens as comments
By populating the lexeme string in it, based on the bufpos
- - - - -
bad712ac by Alan Zimmerman at 2025-06-26T18:39:02+01:00
WIP
- - - - -
b5b7560d by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Simplifying
- - - - -
0b68bfb0 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Update the active state logic
- - - - -
ae6de9c3 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Work the new logic into the mainline code
- - - - -
ea22a018 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Process `defined` operator
- - - - -
ea3bfb18 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Manage lexer state while skipping tokens
There is very intricate layout-related state used when lexing. If a
CPP directive blanks out some tokens, store this state when the
blanking starts, and restore it when they are no longer being blanked.
- - - - -
f1a49aed by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Track the last token buffer index, for ITCppIgnored
We need to attach the source being skipped in an ITCppIgnored token.
We cannot simply use its BufSpan as an index into the underlying
StringBuffer as it counts unicode chars, not bytes.
So we update the lexer state to store the starting StringBuffer
location for the last token, and use the already-stored length to
extract the correct portion of the StringBuffer being parsed.
- - - - -
8acd3528 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Process the ! operator in GHC_CPP expressions
- - - - -
5ad037f4 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Predefine a constant when GHC_CPP is being used.
- - - - -
c997f1f8 by Alan Zimmerman at 2025-06-26T18:39:02+01:00
WIP
- - - - -
4f13bcfa by Alan Zimmerman at 2025-06-26T18:39:02+01:00
Skip lines directly in the lexer when required
- - - - -
af131e84 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Properly manage location when accepting tokens again
- - - - -
81dd5ed4 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Seems to be working now, for Example9
- - - - -
bf1017d2 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Remove tracing
- - - - -
44c09f38 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Fix parsing '*' in block comments
Instead of replacing them with '-'
- - - - -
c6b49b66 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Keep the trailing backslash in a ITcpp token
- - - - -
5a65649b by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Deal with only enabling one section of a group.
A group is an instance of a conditional introduced by
#if/#ifdef/#ifndef,
and ending at the final #endif, including intermediate #elsif sections
- - - - -
ce682fcd by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Replace remaining identifiers with 0 when evaluating
As per the spec
- - - - -
6aea28ee by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Snapshot before rebase
- - - - -
9920e8a5 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Skip non-processed lines starting with #
- - - - -
a78a78fb by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Export generateMacros so we can use it in ghc-exactprint
- - - - -
5d3cda56 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Fix rebase
- - - - -
10d75bd9 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Expose initParserStateWithMacrosString
- - - - -
e8aedd1e by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Fix buggy lexer cppSkip
It was skipping all lines, not just ones prefixed by #
- - - - -
0ef3a1c4 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Fix evaluation of && to use the correct operator
- - - - -
e9e35497 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Deal with closing #-} at the start of a line
- - - - -
88caeca9 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Add the MIN_VERSION_GLASGOW_HASKELL predefined macro
- - - - -
7925b8ad by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Include MIN_VERSION_GLASGOW_HASKELL in GhcCpp01.stderr
- - - - -
7c1769f6 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Use a strict map for macro defines
- - - - -
a54c3ddc by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Process TIdentifierLParen
Which only matters at the start of #define
- - - - -
2caedf81 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Do not provide TIdentifierLParen paren twice
- - - - -
3fd1cc39 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Handle whitespace between identifier and '(' for directive only
- - - - -
e2697e05 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Expose some Lexer bitmap manipulation helpers
- - - - -
7754ec87 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Deal with line pragmas as tokens
Blows up for dumpGhcCpp though
- - - - -
7d180830 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Allow strings delimited by a single quote too
- - - - -
dd41b119 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Allow leading whitespace on cpp directives
As per https://timsong-cpp.github.io/cppwp/n4140/cpp#1
- - - - -
9467f70b by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Implement GHC_CPP undef
- - - - -
1d57e2ac by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Sort out expansion of no-arg macros, in a context with args
And make the expansion bottom out, in the case of recursion
- - - - -
5ae64a16 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Fix GhcCpp01 test
The LINE pragma stuff works in ghc-exactprint when specifically
setting flag to emit ITline_pragma tokens
- - - - -
b28275f8 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Process comments in CPP directives
- - - - -
b7b3efdc by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Correctly lex pragmas with finel #-} on a newline
- - - - -
a63679e0 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Do not process CPP-style comments
- - - - -
5afdbf2d by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Allow cpp-style comments when GHC_CPP enabled
- - - - -
b21dd666 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Return other pragmas as cpp ignored when GHC_CPP active
- - - - -
9a836f18 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Fix exactprinting default decl
- - - - -
76d2c7f1 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Reorganise getOptionsFromFile for use in ghc-exactprint
We want to be able to inject predefined macro definitions into the
parser preprocessor state for when we do a hackage roundtrip.
- - - - -
411b81ab by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Tweak testing
- - - - -
766e1ac9 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Only allow unknown cpp pragmas with # in left margin
- - - - -
d7dcd724 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Require # against left margin for all GHC_CPP directives
- - - - -
69434969 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Fix CPP directives appearing in pragmas
And add a test for error reporting for missing `#if`
- - - - -
de0521ac by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Starting to report GHC_CPP errors using GHC machinery
- - - - -
1c95afdb by Alan Zimmerman at 2025-06-26T18:39:03+01:00
More GHC_CPP diagnostic results
- - - - -
4a6e8cd8 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
WIP on converting error calls to GHC diagnostics in GHC_CPP
- - - - -
e4fff6fc by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Working on CPP diagnostic reporting
- - - - -
fa509388 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Tweak some tests/lint warnings
- - - - -
e99bec0a by Alan Zimmerman at 2025-06-26T18:39:03+01:00
More error reporting in Macro
- - - - -
b3ec8656 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Some cleanups
- - - - -
6dfebd81 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Some cleanup
- - - - -
457d25dd by Alan Zimmerman at 2025-06-26T18:39:03+01:00
GHC_CPP: Working on improving error reporting
- - - - -
aa227951 by Alan Zimmerman at 2025-06-26T18:39:03+01:00
Harvest some commonality
- - - - -
e8898afe by Alan Zimmerman at 2025-06-26T18:39:04+01:00
Use PPM as Maybe inside PP
- - - - -
2219f539 by Alan Zimmerman at 2025-06-26T18:39:04+01:00
Clean up a bit
- - - - -
154 changed files:
- .gitlab-ci.yml
- .gitlab/ci.sh
- .gitlab/common.sh
- .gitlab/generate-ci/gen_ci.hs
- .gitlab/jobs.yaml
- compiler/GHC.hs
- compiler/GHC/Cmm/Lexer.x
- compiler/GHC/Cmm/Parser.y
- compiler/GHC/Cmm/Parser/Monad.hs
- compiler/GHC/Core/Opt/Pipeline.hs
- compiler/GHC/Driver/Backpack.hs
- compiler/GHC/Driver/Config/Parser.hs
- compiler/GHC/Driver/Downsweep.hs
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Driver/Env.hs
- compiler/GHC/Driver/Env/Types.hs
- compiler/GHC/Driver/Flags.hs
- compiler/GHC/Driver/Main.hs
- compiler/GHC/Driver/Make.hs
- compiler/GHC/Driver/Pipeline.hs
- compiler/GHC/Driver/Pipeline/Execute.hs
- compiler/GHC/Driver/Session.hs
- compiler/GHC/Iface/Load.hs
- compiler/GHC/Parser.hs-boot
- compiler/GHC/Parser.y
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Parser/Errors/Ppr.hs
- compiler/GHC/Parser/Errors/Types.hs
- compiler/GHC/Parser/HaddockLex.x
- compiler/GHC/Parser/Header.hs
- compiler/GHC/Parser/Lexer.x
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Parser/PostProcess/Haddock.hs
- + compiler/GHC/Parser/PreProcess.hs
- + compiler/GHC/Parser/PreProcess/Eval.hs
- + compiler/GHC/Parser/PreProcess/Lexer.x
- + compiler/GHC/Parser/PreProcess/Macro.hs
- + compiler/GHC/Parser/PreProcess/ParsePP.hs
- + compiler/GHC/Parser/PreProcess/Parser.y
- + compiler/GHC/Parser/PreProcess/ParserM.hs
- + compiler/GHC/Parser/PreProcess/State.hs
- compiler/GHC/Parser/Utils.hs
- compiler/GHC/SysTools/Cpp.hs
- compiler/GHC/Tc/Instance/Family.hs
- compiler/GHC/Tc/Module.hs
- compiler/GHC/Types/Error/Codes.hs
- compiler/GHC/Unit/Env.hs
- compiler/GHC/Unit/Home/Graph.hs
- compiler/GHC/Unit/Home/PackageTable.hs
- compiler/GHC/Unit/Module/Graph.hs
- compiler/Setup.hs
- compiler/ghc.cabal.in
- distrib/configure.ac.in
- docs/users_guide/debugging.rst
- docs/users_guide/ghci.rst
- ghc/GHCi/UI.hs
- ghc/GHCi/UI/Exception.hs
- ghc/GHCi/UI/Print.hs
- hadrian/cfg/default.host.target.in
- hadrian/cfg/default.target.in
- hadrian/cfg/system.config.in
- hadrian/src/Builder.hs
- hadrian/src/Oracles/Setting.hs
- hadrian/src/Rules/Generate.hs
- hadrian/src/Rules/SourceDist.hs
- hadrian/src/Settings/Builders/RunTest.hs
- hadrian/stack.yaml
- hadrian/stack.yaml.lock
- libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs
- libraries/template-haskell/changelog.md
- m4/fp_settings.m4
- m4/ghc_toolchain.m4
- m4/prep_target_file.m4
- rts/linker/LoadArchive.c
- testsuite/tests/count-deps/CountDepsParser.stdout
- testsuite/tests/driver/T4437.hs
- testsuite/tests/ghc-api/T11579.hs
- + testsuite/tests/ghc-cpp/GhcCpp01.hs
- + testsuite/tests/ghc-cpp/GhcCpp01.stderr
- + testsuite/tests/ghc-cpp/GhcCpp02.hs
- + testsuite/tests/ghc-cpp/GhcCpp02.stderr
- + testsuite/tests/ghc-cpp/all.T
- testsuite/tests/ghc-e/should_fail/T18441fail5.stderr
- testsuite/tests/ghci/prog-mhu003/prog-mhu003.stderr
- testsuite/tests/ghci/prog-mhu004/prog-mhu004a.stderr
- + testsuite/tests/ghci/prog-mhu005/Makefile
- + testsuite/tests/ghci/prog-mhu005/a/A.hs
- + testsuite/tests/ghci/prog-mhu005/all.T
- + testsuite/tests/ghci/prog-mhu005/b/B.hs
- + testsuite/tests/ghci/prog-mhu005/prog-mhu005a.script
- + testsuite/tests/ghci/prog-mhu005/prog-mhu005a.stderr
- + testsuite/tests/ghci/prog-mhu005/prog-mhu005a.stdout
- + testsuite/tests/ghci/prog-mhu005/unitA
- + testsuite/tests/ghci/prog-mhu005/unitB
- + testsuite/tests/ghci/prog021/A.hs
- + testsuite/tests/ghci/prog021/B.hs
- + testsuite/tests/ghci/prog021/Makefile
- + testsuite/tests/ghci/prog021/all.T
- + testsuite/tests/ghci/prog021/prog021a.script
- + testsuite/tests/ghci/prog021/prog021a.stderr
- + testsuite/tests/ghci/prog021/prog021a.stdout
- + testsuite/tests/ghci/prog021/prog021b.script
- + testsuite/tests/ghci/prog021/prog021b.stderr
- + testsuite/tests/ghci/prog021/prog021b.stdout
- + testsuite/tests/ghci/prog022/A.hs
- + testsuite/tests/ghci/prog022/B.hs
- + testsuite/tests/ghci/prog022/Makefile
- + testsuite/tests/ghci/prog022/all.T
- + testsuite/tests/ghci/prog022/ghci.prog022a.script
- + testsuite/tests/ghci/prog022/ghci.prog022a.stderr
- + testsuite/tests/ghci/prog022/ghci.prog022a.stdout
- + testsuite/tests/ghci/prog022/ghci.prog022b.script
- + testsuite/tests/ghci/prog022/ghci.prog022b.stderr
- + testsuite/tests/ghci/prog022/ghci.prog022b.stdout
- testsuite/tests/ghci/scripts/ghci021.stderr
- testsuite/tests/interface-stability/template-haskell-exports.stdout
- + testsuite/tests/printer/CppCommentPlacement.hs
- + utils/check-cpp/.ghci
- + utils/check-cpp/.gitignore
- + utils/check-cpp/Eval.hs
- + utils/check-cpp/Example1.hs
- + utils/check-cpp/Example10.hs
- + utils/check-cpp/Example11.hs
- + utils/check-cpp/Example12.hs
- + utils/check-cpp/Example13.hs
- + utils/check-cpp/Example2.hs
- + utils/check-cpp/Example3.hs
- + utils/check-cpp/Example4.hs
- + utils/check-cpp/Example5.hs
- + utils/check-cpp/Example6.hs
- + utils/check-cpp/Example7.hs
- + utils/check-cpp/Example8.hs
- + utils/check-cpp/Example9.hs
- + utils/check-cpp/Lexer.x
- + utils/check-cpp/Macro.hs
- + utils/check-cpp/Main.hs
- + utils/check-cpp/ParsePP.hs
- + utils/check-cpp/ParseSimulate.hs
- + utils/check-cpp/Parser.y
- + utils/check-cpp/ParserM.hs
- + utils/check-cpp/PreProcess.hs
- + utils/check-cpp/README.md
- + utils/check-cpp/State.hs
- + utils/check-cpp/run.sh
- utils/check-exact/ExactPrint.hs
- utils/check-exact/Main.hs
- utils/check-exact/Parsers.hs
- utils/check-exact/Preprocess.hs
- utils/check-exact/Utils.hs
- utils/ghc-toolchain/exe/Main.hs
- utils/ghc-toolchain/src/GHC/Toolchain/Target.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Hyperlinker/Parser.hs
- utils/haddock/haddock-api/src/Haddock/Parser.hs
- utils/haddock/haddock-api/src/Haddock/Types.hs
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/502678977f99a6f2ba49675472848e…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/502678977f99a6f2ba49675472848e…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
15 Sep '25
Simon Peyton Jones pushed to branch wip/T23162-spj at Glasgow Haskell Compiler / GHC
Commits:
142ce546 by Simon Peyton Jones at 2025-09-15T17:48:11+01:00
Wibbles [skip ci]
- - - - -
1 changed file:
- compiler/GHC/Tc/Solver/FunDeps.hs
Changes:
=====================================
compiler/GHC/Tc/Solver/FunDeps.hs
=====================================
@@ -438,7 +438,7 @@ tryEqFunDeps :: EqCt -> SolverStage ()
tryEqFunDeps work_item@(EqCt { eq_lhs = lhs, eq_eq_rel = eq_rel })
| NomEq <- eq_rel
, TyFamLHS tc args <- lhs
- = tryFamEqFunDeps tc args work_item
+ = tryFamEqFunDeps tc args work_item -- We have F args ~ rhs
| otherwise
= nopStage ()
@@ -455,7 +455,6 @@ tryFamEqFunDeps fam_tc args work_item@(EqCt { eq_ev = ev, eq_rhs = rhs })
mkTopBuiltinFamEqFDs fam_tc ops args rhs }
| Injective inj_flags <- tyConInjectivityInfo fam_tc
- , isWanted ev
= if isGiven ev
then nopStage () -- See (INJFAM:Given)
else do { -- Note [Do local fundeps before top-level instances]
@@ -776,8 +775,8 @@ solveFunDeps work_ev fd_eqns
nestFunDepsTcS $
do { (_, eqs) <- wrapUnifier work_ev Nominal do_fundeps
; solveSimpleWanteds eqs }
- -- ToDo: why solveSimpleWanteds? Answer
- -- (a) don't rely on eager unifier
+ -- Why solveSimpleWanteds? Answer
+ -- (a) We don't want to rely on the eager unifier being clever
-- (b) F Int alpha ~ Maybe Int where type instance F Int x = Maybe x
; return unif_happened }
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/142ce546b055d9322437167f957aac8…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/142ce546b055d9322437167f957aac8…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/romes/hadrian-cross-stage2-rebase_SVEN_FIXED] TestCompilerArgs: Fix arch (out of tree)
by Sven Tennie (@supersven) 15 Sep '25
by Sven Tennie (@supersven) 15 Sep '25
15 Sep '25
Sven Tennie pushed to branch wip/romes/hadrian-cross-stage2-rebase_SVEN_FIXED at Glasgow Haskell Compiler / GHC
Commits:
423a7433 by Sven Tennie at 2025-09-15T16:39:58+00:00
TestCompilerArgs: Fix arch (out of tree)
- - - - -
1 changed file:
- hadrian/src/Settings/Builders/RunTest.hs
Changes:
=====================================
hadrian/src/Settings/Builders/RunTest.hs
=====================================
@@ -22,8 +22,6 @@ import Settings.Program (programContext)
import qualified Context.Type
import GHC.Toolchain.Target
-import Text.Read
-import GHC.Platform.ArchOS
import Debug.Trace
@@ -166,11 +164,8 @@ outOfTreeCompilerArgs = do
debugAssertions <- getBooleanSetting TestGhcDebugAssertions
- let readArch :: String -> Maybe Arch
- readArch = readMaybe
-
os <- getTestSetting TestHostOS
- arch <- maybe "unknown" stringEncodeArch . readArch <$> getTestSetting TestTargetARCH
+ arch <- getTestSetting TestTargetARCH
platform <- getTestSetting TestTARGETPLATFORM
wordsize <- show . read @Int <$> getTestSetting TestWORDSIZE
rtsWay <- getTestSetting TestRTSWay
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/423a7433560161d700c23704e8f366a…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/423a7433560161d700c23704e8f366a…
You're receiving this email because of your account on gitlab.haskell.org.
1
0
[Git][ghc/ghc][wip/romes/hadrian-cross-stage2-rebase_SVEN_FIXED] TestCompilerArgs: Fix arch (out of tree)
by Sven Tennie (@supersven) 15 Sep '25
by Sven Tennie (@supersven) 15 Sep '25
15 Sep '25
Sven Tennie pushed to branch wip/romes/hadrian-cross-stage2-rebase_SVEN_FIXED at Glasgow Haskell Compiler / GHC
Commits:
5eb311eb by Sven Tennie at 2025-09-15T16:10:53+00:00
TestCompilerArgs: Fix arch (out of tree)
- - - - -
1 changed file:
- hadrian/src/Settings/Builders/RunTest.hs
Changes:
=====================================
hadrian/src/Settings/Builders/RunTest.hs
=====================================
@@ -166,11 +166,8 @@ outOfTreeCompilerArgs = do
debugAssertions <- getBooleanSetting TestGhcDebugAssertions
- let readArch :: String -> Maybe Arch
- readArch = readMaybe
-
os <- getTestSetting TestHostOS
- arch <- maybe "unknown" stringEncodeArch . readArch <$> getTestSetting TestTargetARCH
+ arch <- getTestSetting TestTargetARCH
platform <- getTestSetting TestTARGETPLATFORM
wordsize <- show . read @Int <$> getTestSetting TestWORDSIZE
rtsWay <- getTestSetting TestRTSWay
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5eb311eb21a48f9ad482fc07748bef0…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5eb311eb21a48f9ad482fc07748bef0…
You're receiving this email because of your account on gitlab.haskell.org.
1
0