[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 7 commits: Revert use of generic instances for compiler time perf reasons.
Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC Commits: 86a646a6 by Andreas Klebinger at 2026-04-22T13:00:05-04:00 Revert use of generic instances for compiler time perf reasons. Revert "Derive Semigroup/Monoid for instances believed could be derived in #25871" This reverts commit 11a04cbb221cc404fe00d65d7c951558ede4caa9. Revert "add Ghc.Data.Pair deriving" This reverts commit 15d9ce449e1be8c01b89fd39bdf1e700ea7d1dce. - - - - - bc9ee1cf by Wen Kokke at 2026-04-22T13:00:51-04:00 hadrian: Fix docs to remove static flavour In 638f6548, the static flavour was turned into into the fully_static flavour transformer. However, this commit did not update flavours.md. - - - - - cc9cc6d5 by Cheng Shao at 2026-04-23T09:40:46+00:00 configure: bump LlvmMaxVersion to 23 This patch bumps `LlvmMaxVersion` to 23 to support LLVM 22.x releases. - - - - - 2ea7ef8e by Cheng Shao at 2026-04-23T09:46:26+00:00 changelog: add llvm 22.x support - - - - - e6ae5764 by Cheng Shao at 2026-04-23T12:35:01-04:00 ci: bump freebsd boot ghc to 9.10.3 This commit bumps freebsd boot ghc to 9.10.3 to align with other platforms and prevent outdated boot libs in boot ghc to block the freebsd job. - - - - - 744b4d80 by Cheng Shao at 2026-04-23T12:35:01-04:00 compiler: improve Binary instance of Array This patch improves the `Binary` instance of `Array`: - We no longer allocate intermediate lists. When serializing an `Array`, we iterate over the elements directly; when deserializing it, we allocate the result `Array` and fill it in a loop. - Now we only serialize the array bounds tuple; the length field is not needed. Closes #27109. - - - - - 40523880 by Cheng Shao at 2026-04-23T12:35:01-04:00 changelog: add changelog entry for improved Binary Array instance - - - - - 17 changed files: - .gitlab/generate-ci/gen_ci.hs - .gitlab/jobs.yaml - + changelog.d/binary-array-no-list - + changelog.d/llvm-22 - compiler/GHC/CmmToAsm/X86/CodeGen.hs - compiler/GHC/CmmToLlvm/CodeGen.hs - compiler/GHC/Data/Pair.hs - compiler/GHC/Hs/Type.hs - compiler/GHC/HsToCore/Pmc.hs - compiler/GHC/HsToCore/Pmc/Solver/Types.hs - compiler/GHC/Parser/PostProcess/Haddock.hs - compiler/GHC/Tc/Utils/TcMType.hs - compiler/GHC/Types/Unique/DSet.hs - compiler/GHC/Utils/Binary.hs - compiler/GHC/Utils/Ppr/Colour.hs - configure.ac - hadrian/doc/flavours.md Changes: ===================================== .gitlab/generate-ci/gen_ci.hs ===================================== @@ -445,7 +445,7 @@ opsysVariables _ FreeBSD14 = mconcat -- Prefer to use the system's clang-based toolchain and not gcc , "CC" =: "cc" , "CXX" =: "c++" - , "FETCH_GHC_VERSION" =: "9.10.1" + , "FETCH_GHC_VERSION" =: "9.10.3" , "CABAL_INSTALL_VERSION" =: "3.14.2.0" ] opsysVariables arch (Linux distro) = distroVariables arch distro ===================================== .gitlab/jobs.yaml ===================================== @@ -1721,7 +1721,7 @@ "CC": "cc", "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", "CXX": "c++", - "FETCH_GHC_VERSION": "9.10.1", + "FETCH_GHC_VERSION": "9.10.3", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "RUNTEST_ARGS": "", "TEST_ENV": "x86_64-freebsd14-validate", @@ -4543,7 +4543,7 @@ "CC": "cc", "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", "CXX": "c++", - "FETCH_GHC_VERSION": "9.10.1", + "FETCH_GHC_VERSION": "9.10.3", "IGNORE_PERF_FAILURES": "all", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "RUNTEST_ARGS": "", @@ -5643,7 +5643,7 @@ "CC": "cc", "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check", "CXX": "c++", - "FETCH_GHC_VERSION": "9.10.1", + "FETCH_GHC_VERSION": "9.10.3", "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check", "RUNTEST_ARGS": "", "TEST_ENV": "x86_64-freebsd14-validate" ===================================== changelog.d/binary-array-no-list ===================================== @@ -0,0 +1,13 @@ +section: compiler +synopsis: Reduce allocations when (de)serialising `Array` in the `ghc` library. +issues: #27109 +mrs: !15805 + +description: { + The `ghc` library's `Binary` instance for `Array` was changed to + avoid allocating an intermediate list and to omit a redundant length + field during (de)serialisation. + + This should only affect the `ghc` library's (de)serialisation code paths, + primarily when parsing HIE files and bytecode objects. +} ===================================== changelog.d/llvm-22 ===================================== @@ -0,0 +1,4 @@ +section: llvm-backend +synopsis: Bump LlvmMaxVersion to support LLVM 22.x releases. +issues: #26813 +mrs: !15405 ===================================== compiler/GHC/CmmToAsm/X86/CodeGen.hs ===================================== @@ -2,8 +2,6 @@ {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE ParallelListComp #-} {-# LANGUAGE NondecreasingIndentation #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingVia #-} ----------------------------------------------------------------------------- -- @@ -74,8 +72,6 @@ import GHC.Cmm.CLabel import GHC.Types.Tickish ( GenTickish(..) ) import GHC.Types.SrcLoc ( srcSpanFile, srcSpanStartLine, srcSpanStartCol ) -import GHC.Generics (Generic, Generically(..)) - -- The rest: import GHC.Data.Maybe ( expectJust ) import GHC.Types.ForeignCall ( CCallConv(..) ) @@ -440,7 +436,7 @@ getRegisterReg _ (CmmLocal lreg) = getLocalRegReg lreg getRegisterReg platform (CmmGlobal mid) = case globalRegMaybe platform $ globalRegUse_reg mid of - Just reg -> RegReal reg + Just reg -> RegReal $ reg Nothing -> pprPanic "getRegisterReg-memory" (ppr $ CmmGlobal mid) -- By this stage, the only MagicIds remaining should be the -- ones which map to a real machine register on this @@ -4936,8 +4932,11 @@ data LoadArgs -- | The code to assign arguments to registers used for argument passing. , assignArgsCode :: InstrBlock } - deriving (Generic) - deriving (Semigroup, Monoid) via Generically LoadArgs +instance Semigroup LoadArgs where + LoadArgs a1 d1 r1 j1 <> LoadArgs a2 d2 r2 j2 + = LoadArgs (a1 ++ a2) (d1 ++ d2) (r1 ++ r2) (j1 S.<> j2) +instance Monoid LoadArgs where + mempty = LoadArgs [] [] [] nilOL -- | An argument passed on the stack, either directly or by reference. -- ===================================== compiler/GHC/CmmToLlvm/CodeGen.hs ===================================== @@ -1,8 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE MultiWayIf #-} {-# OPTIONS_GHC -fno-warn-type-defaults #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingVia #-} -- | Handle conversion of CmmProc to LLVM code. module GHC.CmmToLlvm.CodeGen ( genLlvmProc ) where @@ -31,8 +29,6 @@ import GHC.Data.FastString import GHC.Data.Maybe (expectJust) import GHC.Data.OrdList -import GHC.Generics (Generic, Generically(..)) - import GHC.Types.ForeignCall import GHC.Types.Unique.DSM import GHC.Types.Unique @@ -52,6 +48,7 @@ import Data.List ( nub ) import qualified Data.List as List import Data.List.NonEmpty ( NonEmpty (..), nonEmpty ) import Data.Maybe ( catMaybes ) +import qualified Data.Semigroup as Semigroup type Atomic = Maybe MemoryOrdering type LlvmStatements = OrdList LlvmStatement @@ -2478,8 +2475,14 @@ getTBAARegMeta = getTBAAMeta . getTBAA -- | A more convenient way of accumulating LLVM statements and declarations. data LlvmAccum = LlvmAccum LlvmStatements [LlvmCmmDecl] - deriving (Generic) - deriving (Monoid, Semigroup) via Generically LlvmAccum + +instance Semigroup LlvmAccum where + LlvmAccum stmtsA declsA <> LlvmAccum stmtsB declsB = + LlvmAccum (stmtsA Semigroup.<> stmtsB) (declsA Semigroup.<> declsB) + +instance Monoid LlvmAccum where + mempty = LlvmAccum nilOL [] + mappend = (Semigroup.<>) liftExprData :: LlvmM ExprData -> WriterT LlvmAccum LlvmM LlvmVar liftExprData action = do ===================================== compiler/GHC/Data/Pair.hs ===================================== @@ -1,6 +1,3 @@ -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingVia #-} - {- A simple homogeneous pair type with useful Functor, Applicative, and Traversable instances. @@ -23,12 +20,8 @@ import GHC.Prelude import GHC.Utils.Outputable import qualified Data.Semigroup as Semi -import GHC.Generics (Generic, Generically(..)) - data Pair a = Pair { pFst :: a, pSnd :: a } - deriving (Foldable, Functor, Traversable, Generic) - deriving (Semigroup, Monoid) via Generically (Pair a) - + deriving (Foldable, Functor, Traversable) -- Note that Pair is a *unary* type constructor -- whereas (,) is binary @@ -40,6 +33,13 @@ instance Applicative Pair where pure x = Pair x x (Pair f g) <*> (Pair x y) = Pair (f x) (g y) +instance Semi.Semigroup a => Semi.Semigroup (Pair a) where + Pair a1 b1 <> Pair a2 b2 = Pair (a1 Semi.<> a2) (b1 Semi.<> b2) + +instance (Semi.Semigroup a, Monoid a) => Monoid (Pair a) where + mempty = Pair mempty mempty + mappend = (Semi.<>) + instance Outputable a => Outputable (Pair a) where ppr (Pair a b) = ppr a <+> char '~' <+> ppr b ===================================== compiler/GHC/Hs/Type.hs ===================================== @@ -1,8 +1,8 @@ {-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE ViewPatterns #-} {-# LANGUAGE UndecidableInstances #-} -- Wrinkle in Note [Trees That Grow] -- in module Language.Haskell.Syntax.Extension -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingVia #-} + {-# OPTIONS_GHC -Wno-orphans #-} -- NamedThing, Outputable, OutputableBndrId {- @@ -117,7 +117,6 @@ import GHC.Core.Ppr ( pprOccWithTick) import GHC.Core.Type import GHC.Core.Multiplicity( pprArrowWithModifiers ) import GHC.Hs.Doc -import GHC.Generics (Generic, Generically(..)) import GHC.Types.Basic import GHC.Types.SrcLoc import GHC.Utils.Outputable @@ -233,8 +232,6 @@ data HsTyPatRnBuilder = hstpb_imp_tvs :: Bag Name, hstpb_exp_tvs :: Bag Name } - deriving (Generic) - deriving (Semigroup, Monoid) via Generically HsTyPatRnBuilder tpBuilderExplicitTV :: Name -> HsTyPatRnBuilder tpBuilderExplicitTV name = mempty {hstpb_exp_tvs = unitBag name} @@ -246,6 +243,16 @@ tpBuilderPatSig HsPSRn {hsps_nwcs, hsps_imp_tvs} = hstpb_imp_tvs = listToBag hsps_imp_tvs } +instance Semigroup HsTyPatRnBuilder where + HsTPRnB nwcs1 imp_tvs1 exptvs1 <> HsTPRnB nwcs2 imp_tvs2 exptvs2 = + HsTPRnB + (nwcs1 `unionBags` nwcs2) + (imp_tvs1 `unionBags` imp_tvs2) + (exptvs1 `unionBags` exptvs2) + +instance Monoid HsTyPatRnBuilder where + mempty = HsTPRnB emptyBag emptyBag emptyBag + buildHsTyPatRn :: HsTyPatRnBuilder -> HsTyPatRn buildHsTyPatRn HsTPRnB {hstpb_nwcs, hstpb_imp_tvs, hstpb_exp_tvs} = HsTPRn { ===================================== compiler/GHC/HsToCore/Pmc.hs ===================================== @@ -1,6 +1,3 @@ -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingVia #-} - -- | This module coverage checks pattern matches. It finds -- -- * Uncovered patterns, certifying non-exhaustivity @@ -66,7 +63,6 @@ import {-# SOURCE #-} GHC.HsToCore.Expr (dsLExpr) import GHC.HsToCore.Monad import GHC.Data.Bag import GHC.Data.OrdList -import GHC.Generics (Generic, Generically(..)) import Control.Monad (when, forM_) import qualified Data.Semigroup as Semi @@ -468,8 +464,13 @@ data CIRB , cirb_red :: !(OrdList SrcInfo) -- ^ Redundant clauses , cirb_bangs :: !(OrdList SrcInfo) -- ^ Redundant bang patterns } - deriving (Generic) - deriving (Semigroup, Monoid) via Generically CIRB + +instance Semigroup CIRB where + CIRB a b c d <> CIRB e f g h = CIRB (a <> e) (b <> f) (c <> g) (d <> h) + where (<>) = (Semi.<>) + +instance Monoid CIRB where + mempty = CIRB mempty mempty mempty mempty -- See Note [Determining inaccessible clauses] ensureOneNotRedundant :: CIRB -> CIRB ===================================== compiler/GHC/HsToCore/Pmc/Solver/Types.hs ===================================== @@ -2,8 +2,6 @@ {-# LANGUAGE ViewPatterns #-} {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingVia #-} -- | Domain types used in "GHC.HsToCore.Pmc.Solver". -- The ultimate goal is to define 'Nabla', which models normalised refinement @@ -71,7 +69,6 @@ import GHC.Types.CompleteMatch import GHC.Types.SourceText (SourceText(..), mkFractionalLit, FractionalLit , fractionalLitFromRational , FractionalExponentBase(..)) -import GHC.Generics (Generic, Generically(..)) import Numeric (fromRat) import Data.Ratio @@ -108,13 +105,19 @@ instance Outputable Nabla where -- | A disjunctive bag of 'Nabla's, representing a refinement type. newtype Nablas = MkNablas (Bag Nabla) - -- deriving 'Outputable' removes `MkNablas` label - deriving (Generic, Outputable) - deriving (Semigroup, Monoid) via Generically Nablas initNablas :: Nablas initNablas = MkNablas (unitBag initNabla) +instance Outputable Nablas where + ppr (MkNablas nablas) = ppr nablas + +instance Semigroup Nablas where + MkNablas l <> MkNablas r = MkNablas (l `unionBags` r) + +instance Monoid Nablas where + mempty = MkNablas emptyBag + -- | The type oracle state. An 'GHC.Tc.Solver.Monad.InertSet' that we -- incrementally add local type constraints to, together with a sequence -- number that counts the number of times we extended it with new facts. ===================================== compiler/GHC/Parser/PostProcess/Haddock.hs ===================================== @@ -1,5 +1,4 @@ {-# LANGUAGE ApplicativeDo #-} -{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE TypeFamilies #-} @@ -62,7 +61,6 @@ import {-# SOURCE #-} GHC.Parser (parseIdentifier) import GHC.Parser.Lexer import GHC.Parser.HaddockLex import GHC.Parser.Errors.Types -import GHC.Generics (Generic, Generically(..)) import GHC.Utils.Misc (mergeListsBy, filterOut, (<&&>)) import qualified GHC.Data.Strict as Strict @@ -1349,8 +1347,13 @@ data LocRange = { loc_range_from :: !LowerLocBound, loc_range_to :: !UpperLocBound, loc_range_col :: !ColumnBound } - deriving (Generic) - deriving (Semigroup, Monoid) via Generically LocRange + +instance Semigroup LocRange where + LocRange from1 to1 col1 <> LocRange from2 to2 col2 = + LocRange (from1 <> from2) (to1 <> to2) (col1 <> col2) + +instance Monoid LocRange where + mempty = LocRange mempty mempty mempty -- The location range from the specified position to the end of the file. locRangeFrom :: Strict.Maybe BufPos -> LocRange ===================================== compiler/GHC/Tc/Utils/TcMType.hs ===================================== @@ -1,8 +1,6 @@ {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE RecursiveDo #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingVia #-} {-# OPTIONS_GHC -Wno-incomplete-record-updates #-} {- @@ -147,13 +145,13 @@ import GHC.Utils.Outputable import GHC.Utils.Panic import GHC.Utils.Constants (debugIsOn) -import GHC.Generics (Generic, Generically(..)) - import Control.Monad import Data.IORef import GHC.Data.Maybe import GHC.Types.Name.Reader +import qualified Data.Semigroup as Semi + {- ************************************************************************ * * @@ -1281,8 +1279,17 @@ data CandidatesQTvs -- These are covars. Included only so that we don't repeatedly -- look at covars' kinds in accumulator. Not used by quantifyTyVars. } - deriving (Generic) - deriving (Semigroup, Monoid) via Generically CandidatesQTvs + +instance Semi.Semigroup CandidatesQTvs where + (DV { dv_kvs = kv1, dv_tvs = tv1, dv_cvs = cv1 }) + <> (DV { dv_kvs = kv2, dv_tvs = tv2, dv_cvs = cv2 }) + = DV { dv_kvs = kv1 `unionDVarSet` kv2 + , dv_tvs = tv1 `unionDVarSet` tv2 + , dv_cvs = cv1 `unionVarSet` cv2 } + +instance Monoid CandidatesQTvs where + mempty = DV { dv_kvs = emptyDVarSet, dv_tvs = emptyDVarSet, dv_cvs = emptyVarSet } + mappend = (Semi.<>) instance Outputable CandidatesQTvs where ppr (DV {dv_kvs = kvs, dv_tvs = tvs, dv_cvs = cvs }) ===================================== compiler/GHC/Types/Unique/DSet.hs ===================================== @@ -44,7 +44,6 @@ import GHC.Types.Unique import Data.Coerce import Data.Data -import Data.Semigroup -- See Note [UniqSet invariant] in GHC.Types.Unique.Set for why we want a newtype here. -- Beyond preserving invariants, we may also want to 'override' typeclass @@ -155,9 +154,3 @@ instance Outputable a => Outputable (UniqDSet a) where pprUniqDSet :: (a -> SDoc) -> UniqDSet a -> SDoc pprUniqDSet f = braces . pprWithCommas f . uniqDSetToList - -instance Semigroup (UniqDSet a) where - (<>) = unionUniqDSets - -instance Monoid (UniqDSet a) where - mempty = emptyUniqDSet ===================================== compiler/GHC/Utils/Binary.hs ===================================== @@ -142,6 +142,8 @@ import Control.DeepSeq import Control.Monad ( when, (<$!>), unless, forM_, void ) import Foreign hiding (bit, setBit, clearBit, shiftL, shiftR, void) import Data.Array +import Data.Array.Base (unsafeFreezeIOArray) +import Data.Array.IArray (traverseArray_) import Data.Array.IO import Data.Array.Unsafe import qualified Data.Binary as Binary @@ -970,11 +972,12 @@ instance Binary a => Binary (NonEmpty a) where instance (Ix a, Binary a, Binary b) => Binary (Array a b) where put_ bh arr = do put_ bh $ bounds arr - put_ bh $ elems arr + traverseArray_ (put_ bh) arr + get bh = do - bounds <- get bh - xs <- get bh - return $ listArray bounds xs + (l, u) <- get bh + marr <- newGenArray (l, u) $ \_ -> get bh + unsafeFreezeIOArray marr instance Binary a => Binary (SmallArray a) where put_ bh sa = do ===================================== compiler/GHC/Utils/Ppr/Colour.hs ===================================== @@ -1,17 +1,21 @@ -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingVia #-} - module GHC.Utils.Ppr.Colour where import GHC.Prelude.Basic import Data.Maybe (fromMaybe) import GHC.Data.Bool -import GHC.Generics (Generic, Generically(..)) +import Data.Semigroup as Semi -- | A colour\/style for use with 'coloured'. newtype PprColour = PprColour { renderColour :: String } - deriving (Generic) - deriving (Semigroup, Monoid) via Generically PprColour + +instance Semi.Semigroup PprColour where + PprColour s1 <> PprColour s2 = PprColour (s1 <> s2) + +-- | Allow colours to be combined (e.g. bold + red); +-- In case of conflict, right side takes precedence. +instance Monoid PprColour where + mempty = PprColour mempty + mappend = (<>) renderColourAfresh :: PprColour -> String renderColourAfresh c = renderColour (colReset `mappend` c) ===================================== configure.ac ===================================== @@ -547,7 +547,7 @@ AC_SUBST(InstallNameToolCmd) # versions of LLVM simultaneously, but that stopped working around # 3.5/3.6 release of LLVM. LlvmMinVersion=13 # inclusive -LlvmMaxVersion=22 # not inclusive +LlvmMaxVersion=23 # not inclusive AC_SUBST([LlvmMinVersion]) AC_SUBST([LlvmMaxVersion]) ===================================== hadrian/doc/flavours.md ===================================== @@ -166,18 +166,6 @@ when compiling the `compiler` library, and `hsGhc` when compiling/linking the GH <td>-O</td> <td>-O</td> </tr> - <tr> - <th>static</td> - <td></td> - <td>-O<br>+RTS<br>-O64M<br>-RTS<br>-fPIC -static</td> - <td>-O<br>+RTS<br>-O64M<br>-RTS<br>-fPIC -static</td> - <td></td> - <td>-O2</td> - <td>-O2</td> - <td>-O2</td> - <td>-O<br>-optl -static</td> - <td>-O2<br>-optl -static</td> - </tr> </table> ## Flavour transformers @@ -335,18 +323,6 @@ The supported transformers are listed below: </tr> </table> -### Static - -The `static` flavour does not strictly follow the groupings in the table -above because it links all the executables statically, not just GHC -itself, and because it passes `-optc -static` when delegating to a C -compiler. It also turns off dynamic linking at runtime by by adding the -`-dynamic-system-linker` cabal flag to the `ghc` package build because -`musl` doesn't allow dynamic linking in executables that were statically -linked against `libc`. Static flags are only added when building in a -non-dynamic _way_. Some of the considerations for a static build aren't -a great fit for the flavour system, so it's a little bit hacky. - ## Ways Libraries and GHC can be built in different _ways_, e.g. with or without profiling View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5fdfd0076e941028fcafc89e3d1d312... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/5fdfd0076e941028fcafc89e3d1d312... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Marge Bot (@marge-bot)