diff --git a/.bazelrc b/.bazelrc index 99afabe..41ba7bc 100644 --- a/.bazelrc +++ b/.bazelrc @@ -17,6 +17,8 @@ common:ghc_9_2_5 --repo_env=GHC_VERSION=9.2.5 common:ghc_9_4_5 --repo_env=GHC_VERSION=9.4.5 +common:ghc_9_6_2 --repo_env=GHC_VERSION=9.6.2 + # Try to load a file that includes the remote cache authentication flag try-import %workspace%/.bazelrc.auth diff --git a/.github/workflows/workflow.yaml b/.github/workflows/workflow.yaml index e9798b7..e04caf2 100644 --- a/.github/workflows/workflow.yaml +++ b/.github/workflows/workflow.yaml @@ -23,7 +23,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - ghc-version: ["ghc_8_10_7", "ghc_9_0_2", "ghc_9_2_5", "ghc_9_4_5"] + ghc-version: ["ghc_8_10_7", "ghc_9_0_2", "ghc_9_2_5", "ghc_9_4_5", "ghc_9_6_2"] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 diff --git a/WORKSPACE b/WORKSPACE index 74b7746..2f77a32 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -8,9 +8,9 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "rules_haskell", - sha256 = "298f6f0db23391274b4eca215daa01797d05699469048ef94540d5829b466377", - strip_prefix = "rules_haskell-0.17", - url = "https://github.com/tweag/rules_haskell/archive/refs/tags/v0.17.tar.gz", + sha256 = "fc0c0421051802a8d3cc72dbcfca5e4d4fefcbf0174ed5b444ee4fcae3df4b41", + strip_prefix = "rules_haskell-0.18", + url = "https://github.com/tweag/rules_haskell/archive/refs/tags/v0.18.tar.gz", ) load("@rules_haskell//haskell:repositories.bzl", "rules_haskell_dependencies") diff --git a/himportscan/src/HImportScan/GHC/FakeSettings9_4.hs b/himportscan/src/HImportScan/GHC/FakeSettings9_4.hs index 07b5e1c..1bf76e3 100644 --- a/himportscan/src/HImportScan/GHC/FakeSettings9_4.hs +++ b/himportscan/src/HImportScan/GHC/FakeSettings9_4.hs @@ -2,7 +2,7 @@ -- SPDX-License-Identifier: BSD-3-Clause. {-#LANGUAGE CPP #-} -#if __GLASGOW_HASKELL__ >= 904 +#if __GLASGOW_HASKELL__ == 904 {-# OPTIONS_GHC -Wno-missing-fields #-} {-# OPTIONS_GHC -Wno-name-shadowing #-} diff --git a/himportscan/src/HImportScan/GHC/FakeSettings9_6.hs b/himportscan/src/HImportScan/GHC/FakeSettings9_6.hs new file mode 100644 index 0000000..9db8adc --- /dev/null +++ b/himportscan/src/HImportScan/GHC/FakeSettings9_6.hs @@ -0,0 +1,67 @@ +-- Copyright (c) 2020, Shayne Fletcher. All rights reserved. +-- SPDX-License-Identifier: BSD-3-Clause. +{-#LANGUAGE CPP #-} + +#if __GLASGOW_HASKELL__ >= 906 + +{-# OPTIONS_GHC -Wno-missing-fields #-} +{-# OPTIONS_GHC -Wno-name-shadowing #-} + +-- This file is a single code path copied over from https://hackage.haskell.org/package/ghc-lib-parser-ex-8.10.0.24/docs/src/Language.Haskell.GhclibParserEx.GHC.Settings.Config.html +-- TODO[GL]: We can get rid of this file once we only support >=9.2, as ParserOpts are much smaller there. +module HImportScan.GHC.FakeSettings9_6( + fakeSettings + , fakeLlvmConfig + ) +where + +import GHC.CmmToLlvm.Config (LlvmConfig (..)) +import GHC.Settings.Config +import GHC.Driver.Session +import GHC.Utils.Fingerprint +import GHC.Platform +import GHC.Settings + +fakeSettings :: Settings +fakeSettings = Settings + { sGhcNameVersion=ghcNameVersion + , sFileSettings=fileSettings + , sTargetPlatform=platform + , sPlatformMisc=platformMisc + , sToolSettings=toolSettings + , sRawSettings=[] + } + where + toolSettings = ToolSettings { + toolSettings_opt_P_fingerprint=fingerprint0 + } + fileSettings = FileSettings {} + platformMisc = PlatformMisc {} + ghcNameVersion = + GhcNameVersion{ghcNameVersion_programName="ghc" + ,ghcNameVersion_projectVersion=cProjectVersion + } + platform = + Platform{ + platformWordSize=PW8 + , platformArchOS=ArchOS {archOS_arch=ArchUnknown, archOS_OS=OSUnknown} + , platformByteOrder = LittleEndian + , platformUnregisterised=True + , platformHasGnuNonexecStack = False + , platformHasIdentDirective = False + , platformHasSubsectionsViaSymbols = False + , platformIsCrossCompiling = False + , platformLeadingUnderscore = False + , platformTablesNextToCode = False + , platform_constants = Nothing + , platformHasLibm = True + } + +fakeLlvmConfig :: LlvmConfig +fakeLlvmConfig = LlvmConfig [] [] + +#else + +module HImportScan.GHC.FakeSettings9_6 where + +#endif diff --git a/himportscan/src/HImportScan/GHC9_4.hs b/himportscan/src/HImportScan/GHC9_4.hs index 89fad09..9b61c04 100644 --- a/himportscan/src/HImportScan/GHC9_4.hs +++ b/himportscan/src/HImportScan/GHC9_4.hs @@ -1,6 +1,6 @@ {-#LANGUAGE CPP #-} -#if __GLASGOW_HASKELL__ >= 904 +#if __GLASGOW_HASKELL__ == 904 -- | A module abstracting the provenance of GHC API names module HImportScan.GHC9_4 (module X, imports, handleParseError, getOptions) where diff --git a/himportscan/src/HImportScan/GHC9_6.hs b/himportscan/src/HImportScan/GHC9_6.hs new file mode 100644 index 0000000..12b0e74 --- /dev/null +++ b/himportscan/src/HImportScan/GHC9_6.hs @@ -0,0 +1,103 @@ +{-#LANGUAGE CPP #-} + +#if __GLASGOW_HASKELL__ >= 906 + +-- | A module abstracting the provenance of GHC API names +module HImportScan.GHC9_6 (module X, imports, handleParseError, getOptions) where + +import HImportScan.GHC.FakeSettings9_6 as X + +import GHC.Driver.Session as X (DynFlags, defaultDynFlags, xopt_set, xopt_unset) +import GHC.Data.EnumSet as X (empty, fromList) +import GHC.Driver.Errors as X (printMessages) +import GHC.Data.FastString as X (FastString, mkFastString, unpackFS) +import GHC as X (runGhc, getSessionDynFlags) +import GHC.LanguageExtensions as X + (Extension + ( ImportQualifiedPost + , PackageImports + , TemplateHaskell + , ImplicitPrelude + , PatternSynonyms + , ExplicitNamespaces + , MagicHash + ) + ) +import GHC.Parser.Header as X (getImports) +import GHC.Types.Error (NoDiagnosticOpts (..)) +import GHC.Types.SourceError (mkSrcErr) +import GHC.Parser.Lexer as X + ( ParseResult(..) + , ParserOpts + , Token(..) + , lexer + , loc + , unP + ) +import GHC.Unit.Module as X (ModuleName, moduleNameString) +import GHC.Types.SrcLoc as X + ( Located + , RealSrcLoc + , SrcLoc(RealSrcLoc) + , getLoc + , mkRealSrcLoc + , srcLocLine + , srcLocCol + , srcSpanStart + , unLoc + ) +import GHC.Data.StringBuffer as X (StringBuffer(StringBuffer), stringToStringBuffer) +import GHC.Driver.Config.Parser +import GHC.Utils.Logger as X +import Control.Exception (throwIO) +import GHC.Parser.Errors.Types (PsMessage) +import GHC.Driver.Errors.Types (GhcMessage(GhcPsMessage)) +import GHC.Driver.Config.Diagnostic (initDiagOpts) +import GHC.Types.Error (Messages) +import GHC.Types.PkgQual (RawPkgQual (RawPkgQual, NoRawPkgQual)) +import qualified GHC.Types.SourceText as StringLiteral (sl_fs) +import qualified GHC.Parser.Header as PH (getOptions) + +initOpts :: DynFlags -> ParserOpts +initOpts = initParserOpts + +getOptions :: DynFlags -> StringBuffer -> FilePath -> [Located String] +getOptions dynFlags sb filePath = + snd $ PH.getOptions (initOpts dynFlags) sb filePath + +imports :: + DynFlags -> + StringBuffer -> + FilePath -> + IO + ( Either + -- (Bag PsError) + (Messages PsMessage) + ( [(Maybe FastString, Located ModuleName)], + [(Maybe FastString, Located ModuleName)], Located ModuleName + ) + ) +imports dynFlagsWithExtensions sb filePath = do + -- [GG] We should never care about the Prelude import, + -- since it is always a module from an external library. + -- Hence the `False`. + imports' <- getImports (initOpts dynFlagsWithExtensions) False sb filePath filePath + + return $ (\ (m1, m2, _, mname) -> (toFastMessage <$> m1, toFastMessage <$> m2, mname)) `fmap` imports' + where + toFastMessage (NoRawPkgQual, b) = (Nothing, b) + toFastMessage (RawPkgQual stringLit, b) = (Just $ StringLiteral.sl_fs stringLit, b) + +handleParseError :: DynFlags -> Messages PsMessage -> IO a +handleParseError dynFlagsWithExtensions err = do + logger <- initLogger + let diagOpts = initDiagOpts dynFlagsWithExtensions + ghcErrors = GhcPsMessage <$> err + printMessages logger NoDiagnosticOpts diagOpts err + throwIO (mkSrcErr ghcErrors) + +#else + +module HImportScan.GHC9_6 where + +#endif diff --git a/himportscan/src/HImportScan/ImportScanner.hs b/himportscan/src/HImportScan/ImportScanner.hs index 1205b26..3b130a6 100644 --- a/himportscan/src/HImportScan/ImportScanner.hs +++ b/himportscan/src/HImportScan/ImportScanner.hs @@ -26,7 +26,9 @@ import Data.Set (Set) import qualified Data.Set as Set import System.Directory (doesFileExist) -#if __GLASGOW_HASKELL__ >= 904 +#if __GLASGOW_HASKELL__ >= 906 +import HImportScan.GHC9_6 as GHC +#elif __GLASGOW_HASKELL__ == 904 import HImportScan.GHC9_4 as GHC #elif __GLASGOW_HASKELL__ >= 902 import HImportScan.GHC9_2 as GHC @@ -112,8 +114,12 @@ scanImports filePath contents = do -- TODO[GL]: Once we're on ghc 9.2 we can get rid of all the things relating to dynFlags, and use the much smaller -- ParserOpts, as getImports no longer depends on DynFlags then. - let dynFlagsWithExtensions = toggleDynFlags $ GHC.defaultDynFlags GHC.fakeSettings GHC.fakeLlvmConfig - + let dynFlagsWithExtensions = toggleDynFlags $ +#if __GLASGOW_HASKELL__ >= 906 + GHC.defaultDynFlags GHC.fakeSettings +#else + GHC.defaultDynFlags GHC.fakeSettings GHC.fakeLlvmConfig +#endif let -- [GL] The fact that the resulting strings here contain the "-X"s makes me a bit doubtful that this is the right approach, -- but this is what I found for now. diff --git a/snapshot-9.6.2.json b/snapshot-9.6.2.json new file mode 100644 index 0000000..70dcd25 --- /dev/null +++ b/snapshot-9.6.2.json @@ -0,0 +1,60 @@ +{ + "__GENERATED_FILE_DO_NOT_MODIFY_MANUALLY": 911779868, + "all-cabal-hashes": "https://raw.githubusercontent.com/commercialhaskell/all-cabal-hashes/d77837f979c4b15fe0eb25cdf8a0463773434c9d", + "resolved": { + "Cabal": {"dependencies":["Cabal-syntax","array","base","bytestring","containers","deepseq","directory","filepath","mtl","parsec","pretty","process","text","time","transformers","unix"],"location":{"type":"git","url":"https://github.com/tweag/cabal","commit":"4f8c4ab8274320c1a00992c9aa7c6559ff190fa9","subdir":"Cabal"},"name":"Cabal","version":"3.8.1.0"}, + "Cabal-syntax": {"dependencies":[],"location":{"type":"core"},"name":"Cabal-syntax","version":"3.10.1.0"}, + "Glob": {"dependencies":["base","containers","directory","dlist","filepath","transformers","transformers-compat"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/Glob-0.10.2/Glob-0.10.2.tar.gz"},"name":"Glob","pinned":{"url":["https://hackage.haskell.org/package/Glob-0.10.2/Glob-0.10.2.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/Glob-0.10.2.tar.gz"],"sha256":"6af672ac8427d35cbd42d64142dc288feab266f0be92dae3c696e8860d8173c0","cabal-sha256":"dd2ddbecae8f84e8f4cacb5b856901a19c25ceaa11f2525d3ee88d034acb0081"},"version":"0.10.2"}, + "HUnit": {"dependencies":["base","call-stack","deepseq"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/HUnit-1.6.2.0/HUnit-1.6.2.0.tar.gz"},"name":"HUnit","pinned":{"url":["https://hackage.haskell.org/package/HUnit-1.6.2.0/HUnit-1.6.2.0.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/HUnit-1.6.2.0.tar.gz"],"sha256":"b0b7538871ffc058486fc00740886d2f3172f8fa6869936bfe83a5e10bd744ab","cabal-sha256":"1a79174e8af616117ad39464cac9de205ca923da6582825e97c10786fda933a4"},"version":"1.6.2.0"}, + "QuickCheck": {"dependencies":["base","containers","deepseq","random","splitmix","template-haskell","transformers"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/QuickCheck-2.14.3/QuickCheck-2.14.3.tar.gz"},"name":"QuickCheck","pinned":{"url":["https://hackage.haskell.org/package/QuickCheck-2.14.3/QuickCheck-2.14.3.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/QuickCheck-2.14.3.tar.gz"],"sha256":"5c0f22b36b28a1a8fa110b3819818d3f29494a3b0dedbae299f064123ca70501","cabal-sha256":"f03d2f404d5ba465453d0fbc1944832789a759fe7c4f9bf8616bc1378a02fde4"},"version":"2.14.3"}, + "ansi-terminal": {"dependencies":["ansi-terminal-types","base","colour"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/ansi-terminal-1.0/ansi-terminal-1.0.tar.gz"},"name":"ansi-terminal","pinned":{"url":["https://hackage.haskell.org/package/ansi-terminal-1.0/ansi-terminal-1.0.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/ansi-terminal-1.0.tar.gz"],"sha256":"0798a98f79189e62b5ff0aa247ba95fc3845f0f6f1e14ecceb37facfbdd5cfc9","cabal-sha256":"640ffecfd95471388d939fcacb57bdc0cef15f0457746c234a12cdd5a6c6d1e8"},"version":"1.0"}, + "ansi-terminal-types": {"dependencies":["base","colour"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/ansi-terminal-types-0.11.5/ansi-terminal-types-0.11.5.tar.gz"},"name":"ansi-terminal-types","pinned":{"url":["https://hackage.haskell.org/package/ansi-terminal-types-0.11.5/ansi-terminal-types-0.11.5.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/ansi-terminal-types-0.11.5.tar.gz"],"sha256":"bf7b230389f43105100a6d5740822598a88b38eaaf7d042de595ccf72db4fdd1","cabal-sha256":"f78440dfd95c4509e88855ac7cc2d9566ddf956a92c1290404cac93ad1a1b00a"},"version":"0.11.5"}, + "array": {"dependencies":[],"location":{"type":"core"},"name":"array","version":"0.5.5.0"}, + "base": {"dependencies":[],"location":{"type":"core"},"name":"base","version":"4.18.1.0"}, + "bytestring": {"dependencies":[],"location":{"type":"core"},"name":"bytestring","version":"0.11.5.2"}, + "call-stack": {"dependencies":["base"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/call-stack-0.4.0/call-stack-0.4.0.tar.gz"},"name":"call-stack","pinned":{"url":["https://hackage.haskell.org/package/call-stack-0.4.0/call-stack-0.4.0.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/call-stack-0.4.0.tar.gz"],"sha256":"430bcf8a3404f7e55319573c0b807b1356946f0c8f289bb3d9afb279c636b87b","cabal-sha256":"ac44d2c00931dc20b01750da8c92ec443eb63a7231e8550188cb2ac2385f7feb"},"version":"0.4.0"}, + "colour": {"dependencies":["base"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/colour-2.3.6/colour-2.3.6.tar.gz"},"name":"colour","pinned":{"url":["https://hackage.haskell.org/package/colour-2.3.6/colour-2.3.6.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/colour-2.3.6.tar.gz"],"sha256":"2cd35dcd6944a5abc9f108a5eb5ee564b6b1fa98a9ec79cefcc20b588991f871","cabal-sha256":"ebdcbf15023958838a527e381ab3c3b1e99ed12d1b25efeb7feaa4ad8c37664a"},"version":"2.3.6"}, + "containers": {"dependencies":[],"location":{"type":"core"},"name":"containers","version":"0.6.7"}, + "deepseq": {"dependencies":[],"location":{"type":"core"},"name":"deepseq","version":"1.4.8.1"}, + "directory": {"dependencies":[],"location":{"type":"core"},"name":"directory","version":"1.3.8.1"}, + "dlist": {"dependencies":["base","deepseq"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/dlist-1.0/dlist-1.0.tar.gz"},"name":"dlist","pinned":{"url":["https://hackage.haskell.org/package/dlist-1.0/dlist-1.0.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/dlist-1.0.tar.gz"],"sha256":"173d637328bb173fcc365f30d29ff4a94292a1e0e5558aeb3dfc11de81510115","cabal-sha256":"55ff69d20ce638fc7727342ee67f2f868da61d3dcf3763f790bf9aa0b145e568"},"version":"1.0"}, + "filepath": {"dependencies":[],"location":{"type":"core"},"name":"filepath","version":"1.4.100.4"}, + "ghc-prim": {"dependencies":[],"location":{"type":"core"},"name":"ghc-prim","version":"0.10.0"}, + "haskell-lexer": {"dependencies":["base"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/haskell-lexer-1.1.1/haskell-lexer-1.1.1.tar.gz"},"name":"haskell-lexer","pinned":{"url":["https://hackage.haskell.org/package/haskell-lexer-1.1.1/haskell-lexer-1.1.1.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/haskell-lexer-1.1.1.tar.gz"],"sha256":"c8eeda569a30f115244c17920247ba2c45d11b3e30805f648a878f7855d8f349","cabal-sha256":"4ce310678b7e56b51acb558c0233d2f71a3f3553f8a88e9b48c0bc68301f799b"},"version":"1.1.1"}, + "hspec": {"dependencies":["QuickCheck","base","hspec-core","hspec-discover","hspec-expectations"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/hspec-2.11.7/hspec-2.11.7.tar.gz"},"name":"hspec","pinned":{"url":["https://hackage.haskell.org/package/hspec-2.11.7/hspec-2.11.7.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/hspec-2.11.7.tar.gz"],"sha256":"2a3e108abd9ba4133f96131cf22e5e4e4c77f3f125b377e6d4c14719746e3096","cabal-sha256":"2869580a2a29e7beb6268ea3dc561583f4ae229ed1f47fb1c92e8c09ce35acec"},"version":"2.11.7"}, + "hspec-api": {"dependencies":["base","hspec-core","transformers"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/hspec-api-2.11.7/hspec-api-2.11.7.tar.gz"},"name":"hspec-api","pinned":{"url":["https://hackage.haskell.org/package/hspec-api-2.11.7/hspec-api-2.11.7.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/hspec-api-2.11.7.tar.gz"],"sha256":"b29e88412192dd7865fcf073b72d5bc2af0d5e1756ada47e6e0676aa234c31c5","cabal-sha256":"38ae9a6c636539410b87f065f3a529552b11269d0e43d7466bab889c97a0580f"},"version":"2.11.7"}, + "hspec-core": {"dependencies":["HUnit","QuickCheck","ansi-terminal","array","base","call-stack","deepseq","directory","filepath","haskell-lexer","hspec-expectations","process","quickcheck-io","random","stm","tf-random","time","transformers"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/hspec-core-2.11.7/hspec-core-2.11.7.tar.gz"},"name":"hspec-core","pinned":{"url":["https://hackage.haskell.org/package/hspec-core-2.11.7/hspec-core-2.11.7.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/hspec-core-2.11.7.tar.gz"],"sha256":"6ffa9b86b8a79bb7e8de47c4c850a2e2500f770827d6645ff478ea50f731b134","cabal-sha256":"90d8873356d7e15f843bc523360e206e8e356ff6b82a1fa4b3889dc31d073ea1"},"version":"2.11.7"}, + "hspec-discover": {"dependencies":["base","directory","filepath"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/hspec-discover-2.11.7/hspec-discover-2.11.7.tar.gz"},"name":"hspec-discover","pinned":{"url":["https://hackage.haskell.org/package/hspec-discover-2.11.7/hspec-discover-2.11.7.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/hspec-discover-2.11.7.tar.gz"],"sha256":"2862b230bb45eb320dd985659b81b482de98f869f4ed88398555a6a7cd12d82a","cabal-sha256":"6307eb16d308258a99a242025df50217d835ba0a3f205b1202a100a175877b38"},"version":"2.11.7"}, + "hspec-expectations": {"dependencies":["HUnit","base","call-stack"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/hspec-expectations-0.8.4/hspec-expectations-0.8.4.tar.gz"},"name":"hspec-expectations","pinned":{"url":["https://hackage.haskell.org/package/hspec-expectations-0.8.4/hspec-expectations-0.8.4.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/hspec-expectations-0.8.4.tar.gz"],"sha256":"7b8dde7e230ecfda90c95fd80478b244a45e68602fb3dd4a76f4710619be21ff","cabal-sha256":"4237f094a7931202ff57ac6475542b0b314b50a7024550e2b6eb87cfb0d4ff93"},"version":"0.8.4"}, + "json": {"dependencies":["array","base","bytestring","containers","mtl","parsec","pretty","syb","text"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/json-0.11/json-0.11.tar.gz"},"name":"json","pinned":{"url":["https://hackage.haskell.org/package/json-0.11/json-0.11.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/json-0.11.tar.gz"],"sha256":"d079ab12e2482349421044851cf52cf23d0bf762ca9b5c854c902def7277e690","cabal-sha256":"3afa37628415992fe648da6f002672f5a0119aa5d49022bf928d10a927c29318"},"version":"0.11"}, + "logict": {"dependencies":["base","mtl","transformers"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/logict-0.8.1.0/logict-0.8.1.0.tar.gz"},"name":"logict","pinned":{"url":["https://hackage.haskell.org/package/logict-0.8.1.0/logict-0.8.1.0.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/logict-0.8.1.0.tar.gz"],"sha256":"d3dc47581c8484220e57c8f827e0d44f8c04f054aba9ba1797ee15b897e3b813","cabal-sha256":"6c7e89252b7f1963bd472f1345154d9d32eb72bd85c9b6e24f3c6eb9c4401426"},"version":"0.8.1.0"}, + "mtl": {"dependencies":[],"location":{"type":"core"},"name":"mtl","version":"2.3.1"}, + "optparse-applicative": {"dependencies":["base","prettyprinter","prettyprinter-ansi-terminal","process","text","transformers","transformers-compat"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/optparse-applicative-0.18.1.0/optparse-applicative-0.18.1.0.tar.gz"},"name":"optparse-applicative","pinned":{"url":["https://hackage.haskell.org/package/optparse-applicative-0.18.1.0/optparse-applicative-0.18.1.0.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/optparse-applicative-0.18.1.0.tar.gz"],"sha256":"63811ab4fd26e829b8868364325a88be3acc79819f5bb5005b2dd3b961ecc491","cabal-sha256":"b4cf8d9018e5e67cb1f14edb5130b6d05ad8bc1b5f6bd4efaa6ec0b7f28f559d"},"version":"0.18.1.0"}, + "parsec": {"dependencies":[],"location":{"type":"core"},"name":"parsec","version":"3.1.16.1"}, + "pretty": {"dependencies":[],"location":{"type":"core"},"name":"pretty","version":"1.1.3.6"}, + "prettyprinter": {"dependencies":["base","text"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/prettyprinter-1.7.1/prettyprinter-1.7.1.tar.gz"},"name":"prettyprinter","pinned":{"url":["https://hackage.haskell.org/package/prettyprinter-1.7.1/prettyprinter-1.7.1.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/prettyprinter-1.7.1.tar.gz"],"sha256":"5e6ea6903114fa118fcc359633dfb7ecddecb92c06c853d02a77b72b251f0b45","cabal-sha256":"9c43c9d8c3cd9f445596e5a2379574bba87f935a4d1fa41b5407ee3cf4edc743"},"version":"1.7.1"}, + "prettyprinter-ansi-terminal": {"dependencies":["ansi-terminal","base","prettyprinter","text"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/prettyprinter-ansi-terminal-1.1.3/prettyprinter-ansi-terminal-1.1.3.tar.gz"},"name":"prettyprinter-ansi-terminal","pinned":{"url":["https://hackage.haskell.org/package/prettyprinter-ansi-terminal-1.1.3/prettyprinter-ansi-terminal-1.1.3.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/prettyprinter-ansi-terminal-1.1.3.tar.gz"],"sha256":"813739308ad6050620578994effe21058a170a341716acf52573fae42b5b1db3","cabal-sha256":"b00f727b964cf13adff7acf575a71fa7e405f5240aff50b07f10df76ab89f8d3"},"version":"1.1.3"}, + "primitive": {"dependencies":["base","deepseq","template-haskell","transformers"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/primitive-0.8.0.0/primitive-0.8.0.0.tar.gz"},"name":"primitive","pinned":{"url":["https://hackage.haskell.org/package/primitive-0.8.0.0/primitive-0.8.0.0.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/primitive-0.8.0.0.tar.gz"],"sha256":"5553c21b4a789f9b591eed69e598cc58484c274af29250e517b5a8bcc62b995f","cabal-sha256":"d0ff45fa6e61f92af23611ceb8b9a6a04c236b50fb70c60e2ed3bfa532703670"},"version":"0.8.0.0"}, + "process": {"dependencies":[],"location":{"type":"core"},"name":"process","version":"1.6.17.0"}, + "quickcheck-io": {"dependencies":["HUnit","QuickCheck","base"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/quickcheck-io-0.2.0/quickcheck-io-0.2.0.tar.gz"},"name":"quickcheck-io","pinned":{"url":["https://hackage.haskell.org/package/quickcheck-io-0.2.0/quickcheck-io-0.2.0.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/quickcheck-io-0.2.0.tar.gz"],"sha256":"fb779119d79fe08ff4d502fb6869a70c9a8d5fd8ae0959f605c3c937efd96422","cabal-sha256":"7bf0b68fb90873825eb2e5e958c1b76126dcf984debb998e81673e6d837e0b2d"},"version":"0.2.0"}, + "random": {"dependencies":["base","bytestring","deepseq","mtl","splitmix"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/random-1.2.1.1/random-1.2.1.1.tar.gz"},"name":"random","pinned":{"url":["https://hackage.haskell.org/package/random-1.2.1.1/random-1.2.1.1.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/random-1.2.1.1.tar.gz"],"sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","cabal-sha256":"e7c1f881159d5cc788619c9ee8b8f340ba2ff0db571cdf3d1a1968ebc5108789"},"version":"1.2.1.1"}, + "smallcheck": {"dependencies":["base","logict","mtl","pretty"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/smallcheck-1.2.1.1/smallcheck-1.2.1.1.tar.gz"},"name":"smallcheck","pinned":{"url":["https://hackage.haskell.org/package/smallcheck-1.2.1.1/smallcheck-1.2.1.1.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/smallcheck-1.2.1.1.tar.gz"],"sha256":"e043225004071840d1a13f3a2d6fba537144188e7995a978ab82086ce158fe1f","cabal-sha256":"b976cf0bbab4ba29f61933df10740cc19cd17548b5a3d1f8e0205840a1a89738"},"version":"1.2.1.1"}, + "splitmix": {"dependencies":["base","deepseq"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/splitmix-0.1.0.5/splitmix-0.1.0.5.tar.gz"},"name":"splitmix","pinned":{"url":["https://hackage.haskell.org/package/splitmix-0.1.0.5/splitmix-0.1.0.5.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/splitmix-0.1.0.5.tar.gz"],"sha256":"9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002","cabal-sha256":"bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6"},"version":"0.1.0.5"}, + "stm": {"dependencies":[],"location":{"type":"core"},"name":"stm","version":"2.5.1.0"}, + "string-qq": {"dependencies":["base","template-haskell"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/string-qq-0.0.5/string-qq-0.0.5.tar.gz"},"name":"string-qq","pinned":{"url":["https://hackage.haskell.org/package/string-qq-0.0.5/string-qq-0.0.5.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/string-qq-0.0.5.tar.gz"],"sha256":"a9a83cbf72088465933cb698154f2e26a5bdee548d3d5e24fe233a1616415a47","cabal-sha256":"4134753e417ef028f97c2287e9b329ea9f813bacecba1bc5ed7d96ccfc25d2a5"},"version":"0.0.5"}, + "syb": {"dependencies":["base"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/syb-0.7.2.4/syb-0.7.2.4.tar.gz"},"name":"syb","pinned":{"url":["https://hackage.haskell.org/package/syb-0.7.2.4/syb-0.7.2.4.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/syb-0.7.2.4.tar.gz"],"sha256":"ec7c1e8822d62ab910386361cdcee40a22a26cd344c34741fadd982302291e60","cabal-sha256":"936d5a92084ad9d88c5a9dd2e622deab57ce48ce85be93e6273b3f8eb64c12ca"},"version":"0.7.2.4"}, + "tagged": {"dependencies":["base","deepseq","template-haskell","transformers"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/tagged-0.8.8/tagged-0.8.8.tar.gz"},"name":"tagged","pinned":{"url":["https://hackage.haskell.org/package/tagged-0.8.8/tagged-0.8.8.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/tagged-0.8.8.tar.gz"],"sha256":"a083fa7835516203c168433a1c8dfc0290a94b05fedab566ad0640fc9137a6a7","cabal-sha256":"c4fdbd3e1c423af0ccf8eb9e9962620106c34e32ed8e0cc647fb06899a703e04"},"version":"0.8.8"}, + "tasty": {"dependencies":["ansi-terminal","base","containers","optparse-applicative","stm","tagged","transformers","unix"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/tasty-1.4.3/tasty-1.4.3.tar.gz"},"name":"tasty","pinned":{"url":["https://hackage.haskell.org/package/tasty-1.4.3/tasty-1.4.3.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/tasty-1.4.3.tar.gz"],"sha256":"f420da9560267271dce8a0007a1cb77c06987f0d129eb0f613110ce61f71cb00","cabal-sha256":"5b53fded93109f6704b599c3498eb73c5b0ed1a975f1912dd98b4b19c61f8bc9"},"version":"1.4.3"}, + "tasty-discover": {"dependencies":["Glob","base","containers","directory","filepath","tasty"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/tasty-discover-5.0.0/tasty-discover-5.0.0.tar.gz"},"name":"tasty-discover","pinned":{"url":["https://hackage.haskell.org/package/tasty-discover-5.0.0/tasty-discover-5.0.0.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/tasty-discover-5.0.0.tar.gz"],"sha256":"eeb27da5f928d5043385b114e817cc80b0605de45fd490ed6b2973094d1d7028","cabal-sha256":"2799d2aa77c124e3f842abed9db7e8df260fe3d786549c293a322889c05484a8"},"version":"5.0.0"}, + "tasty-hspec": {"dependencies":["QuickCheck","base","hspec","hspec-api","hspec-core","tasty","tasty-quickcheck","tasty-smallcheck"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/tasty-hspec-1.2.0.4/tasty-hspec-1.2.0.4.tar.gz"},"name":"tasty-hspec","pinned":{"url":["https://hackage.haskell.org/package/tasty-hspec-1.2.0.4/tasty-hspec-1.2.0.4.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/tasty-hspec-1.2.0.4.tar.gz"],"sha256":"d1a273cbe653c23422c14e99672f7cd64e07f85bb019f95fef095db8e5b461c2","cabal-sha256":"edf72548ba95c6c12d40fda014953d7d422f0ec1738c2c106988d12724ef049f"},"version":"1.2.0.4"}, + "tasty-quickcheck": {"dependencies":["QuickCheck","base","optparse-applicative","random","tagged","tasty"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/tasty-quickcheck-0.10.2/tasty-quickcheck-0.10.2.tar.gz"},"name":"tasty-quickcheck","pinned":{"url":["https://hackage.haskell.org/package/tasty-quickcheck-0.10.2/tasty-quickcheck-0.10.2.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/tasty-quickcheck-0.10.2.tar.gz"],"sha256":"b4884c815db26a543ee1062664ee051ac89d51b2c2526d30029c6eb95b36cce2","cabal-sha256":"76bf07f500e258903e9a1df6f19788e0ef75e83f33ebe6b6b14b287418e0b7c1"},"version":"0.10.2"}, + "tasty-smallcheck": {"dependencies":["base","optparse-applicative","smallcheck","tagged","tasty"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/tasty-smallcheck-0.8.2/tasty-smallcheck-0.8.2.tar.gz"},"name":"tasty-smallcheck","pinned":{"url":["https://hackage.haskell.org/package/tasty-smallcheck-0.8.2/tasty-smallcheck-0.8.2.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/tasty-smallcheck-0.8.2.tar.gz"],"sha256":"d5cbd7a2a7100e4afd3aaac01a8fa1b7814fb074d93aeff1b51240b687e54f33","cabal-sha256":"b0eeb241a4d34401dbc23790b56989a6089b9b9b2dc07f7b0eece7c485826300"},"version":"0.8.2"}, + "template-haskell": {"dependencies":[],"location":{"type":"core"},"name":"template-haskell","version":"2.20.0.0"}, + "text": {"dependencies":[],"location":{"type":"core"},"name":"text","version":"2.0.2"}, + "tf-random": {"dependencies":["base","primitive","random","time"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/tf-random-0.5/tf-random-0.5.tar.gz"},"name":"tf-random","pinned":{"url":["https://hackage.haskell.org/package/tf-random-0.5/tf-random-0.5.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/tf-random-0.5.tar.gz"],"sha256":"2e30cec027b313c9e1794d326635d8fc5f79b6bf6e7580ab4b00186dadc88510","cabal-sha256":"14012837d0f0e18fdbbe3d56e67da8622ee5e20b180abce952dd50bd9f36b326"},"version":"0.5"}, + "time": {"dependencies":[],"location":{"type":"core"},"name":"time","version":"1.12.2"}, + "transformers": {"dependencies":[],"location":{"type":"core"},"name":"transformers","version":"0.6.1.0"}, + "transformers-compat": {"dependencies":["base","ghc-prim","transformers"],"location":{"type":"hackage","url":"https://hackage.haskell.org/package/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz"},"name":"transformers-compat","pinned":{"url":["https://hackage.haskell.org/package/transformers-compat-0.7.2/transformers-compat-0.7.2.tar.gz","https://s3.amazonaws.com/hackage.fpcomplete.com/package/transformers-compat-0.7.2.tar.gz"],"sha256":"b62c7304c9f3cbc9463d0739aa85cb9489f217ea092b9d625d417514fbcc9d6a","cabal-sha256":"044fb9955f63ee138fcebedfdcbe54afe741f2d5892a2d0bdf3a8052bd342643"},"version":"0.7.2"}, + "unix": {"dependencies":[],"location":{"type":"core"},"name":"unix","version":"2.8.1.0"} + } +} \ No newline at end of file diff --git a/snapshot-9.6.2.yaml b/snapshot-9.6.2.yaml new file mode 100644 index 0000000..84125a4 --- /dev/null +++ b/snapshot-9.6.2.yaml @@ -0,0 +1,7 @@ +resolver: lts-22.0 + +packages: +- git: https://github.com/tweag/cabal + commit: 4f8c4ab8274320c1a00992c9aa7c6559ff190fa9 + subdirs: + - Cabal