From 980e652303c88713dff727ed779163051c340bd2 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Wed, 9 Feb 2022 10:34:32 -0500 Subject: [PATCH 1/7] Support building with GHC 9.2 This contains a variety of changes needed to make Cryptol compile with GHC 9.2: * In GHC 9.2, enabling `UndecidableInstances` no longer implies enabling `FlexibleContexts` (see [here](https://gitlab.haskell.org/ghc/ghc/-/wikis/migration/9.2?version_id=7e2ce63ba042c1934654c4316dc02028d8d3dd31#undecidableinstances-no-longer-implies-flexiblecontexts-in-instance-declarations)). As a result, I had to enable `FlexibleContexts` in `Cryptol.ModuleSystem.Name`. * The `argo` submodule was bumped to bring in the changes from GaloisInc/argo#191, which allows it to build with GHC 9.2. * The upper version bounds on `base`, `bytestring`, `lens`, `base-compat`, and `sbv` were raised to allow building them with GHC 9.2. --- cryptol-remote-api/cryptol-remote-api.cabal | 6 +++--- cryptol.cabal | 4 ++-- deps/argo | 2 +- src/Cryptol/ModuleSystem/Name.hs | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/cryptol-remote-api/cryptol-remote-api.cabal b/cryptol-remote-api/cryptol-remote-api.cabal index c3bf422fe..7d19dc5e1 100644 --- a/cryptol-remote-api/cryptol-remote-api.cabal +++ b/cryptol-remote-api/cryptol-remote-api.cabal @@ -40,16 +40,16 @@ common errors common deps build-depends: - base >=4.11.1.0 && <4.16, + base >=4.11.1.0 && <4.17, argo, aeson >= 1.4.2 && < 2.1, base64-bytestring >= 1.0, - bytestring ^>= 0.10.8, + bytestring >= 0.10.8 && < 0.12, containers >=0.6.0.1 && <0.7, cryptol >= 2.9.0, directory, filepath ^>= 1.4, - lens >= 4.17 && < 5.1, + lens >= 4.17 && < 5.2, mtl ^>= 2.2, scientific ^>= 0.3, text ^>= 1.2.3, diff --git a/cryptol.cabal b/cryptol.cabal index 5ba6740d6..24fc1d546 100644 --- a/cryptol.cabal +++ b/cryptol.cabal @@ -43,7 +43,7 @@ library Build-depends: base >= 4.8 && < 5, arithmoi >= 0.12, async >= 2.2 && < 2.3, - base-compat >= 0.6 && < 0.12, + base-compat >= 0.6 && < 0.13, bv-sized >= 1.0 && < 1.1, bytestring >= 0.10, array >= 0.4, @@ -64,7 +64,7 @@ library parameterized-utils >= 2.0.2, prettyprinter >= 1.7.0, process >= 1.2, - sbv >= 8.10 && < 8.18, + sbv >= 8.10 && < 9.1, simple-smt >= 0.9.7, stm >= 2.4, strict, diff --git a/deps/argo b/deps/argo index afee6bb49..904fb3487 160000 --- a/deps/argo +++ b/deps/argo @@ -1 +1 @@ -Subproject commit afee6bb49c7831a38316221e7b9721fbc65e88d7 +Subproject commit 904fb34872fcef462030fe38978842aa5a9db903 diff --git a/src/Cryptol/ModuleSystem/Name.hs b/src/Cryptol/ModuleSystem/Name.hs index 6fbb16186..beab470a5 100644 --- a/src/Cryptol/ModuleSystem/Name.hs +++ b/src/Cryptol/ModuleSystem/Name.hs @@ -10,6 +10,7 @@ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-} From 5f018444a587241fba73b95b5a936e04f1e08da7 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 1 May 2022 08:20:41 -0400 Subject: [PATCH 2/7] Fix -Woperator-whitespace-ext-conflict warnings GHC 9.2 now includes `-Woperator-whitespace-ext-conflict` as a part of `-Wall`. Thankfully, these warnings are simple to resolve: just put extra whitespace after the affected uses of `$`. --- src/Cryptol/Eval.hs | 4 ++-- src/Cryptol/REPL/Command.hs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Cryptol/Eval.hs b/src/Cryptol/Eval.hs index 0c74be87e..0ece9a3cd 100644 --- a/src/Cryptol/Eval.hs +++ b/src/Cryptol/Eval.hs @@ -566,7 +566,7 @@ toListEnv e = -- locations. evalListEnv :: ListEnv sym -> Integer -> GenEvalEnv sym evalListEnv (ListEnv vm st tm) i = - let v = fmap (Right . ($i)) vm + let v = fmap (Right . ($ i)) vm in EvalEnv{ envVars = IntMap.union v st , envTypes = tm } @@ -664,7 +664,7 @@ evalMatch sym (lsz, lenv) m = seq lsz $ case m of -- `leVars` elements of the comprehension environment into `leStatic` elements -- by selecting out the 0th element. Inf -> do - let allvars = IntMap.union (fmap (Right . ($0)) (leVars lenv)) (leStatic lenv) + let allvars = IntMap.union (fmap (Right . ($ 0)) (leVars lenv)) (leStatic lenv) let lenv' = lenv { leVars = IntMap.empty , leStatic = allvars } diff --git a/src/Cryptol/REPL/Command.hs b/src/Cryptol/REPL/Command.hs index 5ca62e933..0ab500578 100644 --- a/src/Cryptol/REPL/Command.hs +++ b/src/Cryptol/REPL/Command.hs @@ -1255,7 +1255,7 @@ helpCmd cmd noInfo nameEnv name = case M.nameInfo name of M.Declared m _ -> - rPrint $runDoc nameEnv ("Name defined in module" <+> pp m) + rPrint $ runDoc nameEnv ("Name defined in module" <+> pp m) M.Parameter -> rPutStrLn "// No documentation is available." @@ -1339,7 +1339,7 @@ helpCmd cmd return $ do rPutStrLn "" - let property + let property | P.PragmaProperty `elem` ifDeclPragmas = [text "property"] | otherwise = [] rPrint $ runDoc nameEnv From e5ff87f598fbe02ac3ccf935ad0a9072d425923a Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 1 May 2022 08:32:43 -0400 Subject: [PATCH 3/7] Fix -Wnoncanonical-{monad,monoid}-instances warnings GHC 9.2 adds `-Wnoncanonical-monad-instances` and `-Wnoncanonical-monoid-instances` to `-Wall`, which warn whenever one has explicit implementations of `return` or `mappend` that aren't simply `return = pure` or `mappend = (<>)`. This patch makes sure that all `Monad` and `Monoid` instances in Cryptol adhere to these conventions. --- src/Cryptol/Backend/Monad.hs | 4 ++-- src/Cryptol/Eval.hs | 2 +- src/Cryptol/Eval/Env.hs | 2 +- src/Cryptol/Eval/Reference.lhs | 2 +- src/Cryptol/IR/FreeVars.hs | 2 +- src/Cryptol/ModuleSystem/Env.hs | 6 +++--- src/Cryptol/ModuleSystem/Interface.hs | 2 +- src/Cryptol/ModuleSystem/Monad.hs | 2 +- src/Cryptol/ModuleSystem/Renamer/Monad.hs | 2 +- src/Cryptol/Parser/NoInclude.hs | 4 ++-- src/Cryptol/Parser/NoPat.hs | 6 ++++-- src/Cryptol/Parser/ParserUtils.hs | 8 ++++---- src/Cryptol/REPL/Monad.hs | 4 ++-- src/Cryptol/TypeCheck/Monad.hs | 8 ++++---- src/Cryptol/TypeCheck/Sanity.hs | 4 ++-- 15 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/Cryptol/Backend/Monad.hs b/src/Cryptol/Backend/Monad.hs index b821fb035..ef138188a 100644 --- a/src/Cryptol/Backend/Monad.hs +++ b/src/Cryptol/Backend/Monad.hs @@ -383,13 +383,13 @@ instance Functor Eval where {-# INLINE fmap #-} instance Applicative Eval where - pure = return + pure = Ready (<*>) = ap {-# INLINE pure #-} {-# INLINE (<*>) #-} instance Monad Eval where - return = Ready + return = pure (>>=) = evalBind {-# INLINE return #-} {-# INLINE (>>=) #-} diff --git a/src/Cryptol/Eval.hs b/src/Cryptol/Eval.hs index 0ece9a3cd..874ecf5e1 100644 --- a/src/Cryptol/Eval.hs +++ b/src/Cryptol/Eval.hs @@ -550,7 +550,7 @@ instance Monoid (ListEnv sym) where , leTypes = mempty } - mappend l r = l <> r + mappend = (<>) toListEnv :: GenEvalEnv sym -> ListEnv sym toListEnv e = diff --git a/src/Cryptol/Eval/Env.hs b/src/Cryptol/Eval/Env.hs index 83ede33cc..1d63cdbe8 100644 --- a/src/Cryptol/Eval/Env.hs +++ b/src/Cryptol/Eval/Env.hs @@ -48,7 +48,7 @@ instance Monoid (GenEvalEnv sym) where { envVars = IntMap.empty , envTypes = mempty } - mappend l r = l <> r + mappend = (<>) ppEnv :: Backend sym => sym -> PPOpts -> GenEvalEnv sym -> SEval sym Doc ppEnv sym opts env = brackets . fsep <$> mapM bind (IntMap.toList (envVars env)) diff --git a/src/Cryptol/Eval/Reference.lhs b/src/Cryptol/Eval/Reference.lhs index f4d824f9c..f3abe9ab7 100644 --- a/src/Cryptol/Eval/Reference.lhs +++ b/src/Cryptol/Eval/Reference.lhs @@ -259,7 +259,7 @@ and type variables that are in scope at any point. > { envVars = mempty > , envTypes = mempty > } -> mappend l r = l <> r +> mappend = (<>) > > -- | Bind a variable in the evaluation environment. > bindVar :: (Name, E Value) -> Env -> Env diff --git a/src/Cryptol/IR/FreeVars.hs b/src/Cryptol/IR/FreeVars.hs index 765f01ce2..9810af692 100644 --- a/src/Cryptol/IR/FreeVars.hs +++ b/src/Cryptol/IR/FreeVars.hs @@ -32,7 +32,7 @@ instance Monoid Deps where , tyParams = Set.empty } - mappend d1 d2 = d1 <> d2 + mappend = (<>) mconcat ds = Deps { valDeps = Set.unions (map valDeps ds) , tyDeps = Set.unions (map tyDeps ds) diff --git a/src/Cryptol/ModuleSystem/Env.hs b/src/Cryptol/ModuleSystem/Env.hs index 92fc07234..49233d73b 100644 --- a/src/Cryptol/ModuleSystem/Env.hs +++ b/src/Cryptol/ModuleSystem/Env.hs @@ -260,7 +260,7 @@ focusedEnv me = Just c -> dynModContext me <> c Nothing -> panic "focusedEnv" [ "Focused modules not loaded: " ++ show (pp fm) ] - + -- Loaded Modules -------------------------------------------------------------- @@ -318,7 +318,7 @@ instance Monoid LoadedModules where mempty = LoadedModules { lmLoadedModules = [] , lmLoadedParamModules = [] } - mappend l r = l <> r + mappend = (<>) data LoadedModule = LoadedModule { lmName :: ModName @@ -419,7 +419,7 @@ instance Monoid DynamicEnv where , deTySyns = mempty , deEnv = mempty } - mappend de1 de2 = de1 <> de2 + mappend = (<>) -- | Build 'IfaceDecls' that correspond to all of the bindings in the -- dynamic environment. diff --git a/src/Cryptol/ModuleSystem/Interface.hs b/src/Cryptol/ModuleSystem/Interface.hs index d8e2ad11f..88f53a30f 100644 --- a/src/Cryptol/ModuleSystem/Interface.hs +++ b/src/Cryptol/ModuleSystem/Interface.hs @@ -146,7 +146,7 @@ instance Semigroup IfaceDecls where instance Monoid IfaceDecls where mempty = IfaceDecls Map.empty Map.empty Map.empty Map.empty Map.empty - mappend l r = l <> r + mappend = (<>) mconcat ds = IfaceDecls { ifTySyns = Map.unions (map ifTySyns ds) , ifNewtypes = Map.unions (map ifNewtypes ds) diff --git a/src/Cryptol/ModuleSystem/Monad.hs b/src/Cryptol/ModuleSystem/Monad.hs index e78bca045..eaca216ff 100644 --- a/src/Cryptol/ModuleSystem/Monad.hs +++ b/src/Cryptol/ModuleSystem/Monad.hs @@ -339,7 +339,7 @@ instance Monad m => Applicative (ModuleT m) where instance Monad m => Monad (ModuleT m) where {-# INLINE return #-} - return x = ModuleT (return x) + return = pure {-# INLINE (>>=) #-} m >>= f = ModuleT (unModuleT m >>= unModuleT . f) diff --git a/src/Cryptol/ModuleSystem/Renamer/Monad.hs b/src/Cryptol/ModuleSystem/Renamer/Monad.hs index 1afec4e72..2c71969d4 100644 --- a/src/Cryptol/ModuleSystem/Renamer/Monad.hs +++ b/src/Cryptol/ModuleSystem/Renamer/Monad.hs @@ -104,7 +104,7 @@ instance Applicative RenameM where instance Monad RenameM where {-# INLINE return #-} - return x = RenameM (return x) + return = pure {-# INLINE (>>=) #-} m >>= k = RenameM (unRenameM m >>= unRenameM . k) diff --git a/src/Cryptol/Parser/NoInclude.hs b/src/Cryptol/Parser/NoInclude.hs index 418fb86cb..1fd35c3f8 100644 --- a/src/Cryptol/Parser/NoInclude.hs +++ b/src/Cryptol/Parser/NoInclude.hs @@ -116,11 +116,11 @@ instance Functor NoIncM where fmap = liftM instance A.Applicative NoIncM where - pure = return + pure x = M (pure x) (<*>) = ap instance Monad NoIncM where - return x = M (return x) + return = pure m >>= f = M (unM m >>= unM . f) instance Fail.MonadFail NoIncM where diff --git a/src/Cryptol/Parser/NoPat.hs b/src/Cryptol/Parser/NoPat.hs index c4f475e6e..5d04ddd46 100644 --- a/src/Cryptol/Parser/NoPat.hs +++ b/src/Cryptol/Parser/NoPat.hs @@ -565,9 +565,11 @@ data Error = MultipleSignatures PName [Located (Schema PName)] deriving (Show,Generic, NFData) instance Functor NoPatM where fmap = liftM -instance Applicative NoPatM where pure = return; (<*>) = ap +instance Applicative NoPatM where + pure x = M (pure x) + (<*>) = ap instance Monad NoPatM where - return x = M (return x) + return = pure M x >>= k = M (x >>= unM . k) -- | Pick a new name, to be used when desugaring patterns. diff --git a/src/Cryptol/Parser/ParserUtils.hs b/src/Cryptol/Parser/ParserUtils.hs index 8fb94cc8d..f08ce63b9 100644 --- a/src/Cryptol/Parser/ParserUtils.hs +++ b/src/Cryptol/Parser/ParserUtils.hs @@ -151,11 +151,11 @@ instance Functor ParseM where fmap = liftM instance Applicative ParseM where - pure = return + pure a = P (\_ _ s -> Right (a,s)) (<*>) = ap instance Monad ParseM where - return a = P (\_ _ s -> Right (a,s)) + return = pure m >>= k = P (\cfg p s1 -> case unP m cfg p s1 of Left e -> Left e Right (a,s2) -> unP (k a) cfg p s2) @@ -382,7 +382,7 @@ eFromToBy :: Range -> Expr PName -> Expr PName -> Expr PName -> Bool -> ParseM ( eFromToBy r e1 e2 e3 isStrictBound = case (asETyped e1, asETyped e2, asETyped e3) of (Just (e1', t), Nothing, Nothing) -> eFromToByTyped r e1' e2 e3 (Just t) isStrictBound - (Nothing, Just (e2', t), Nothing) -> eFromToByTyped r e1 e2' e3 (Just t) isStrictBound + (Nothing, Just (e2', t), Nothing) -> eFromToByTyped r e1 e2' e3 (Just t) isStrictBound (Nothing, Nothing, Just (e3', t)) -> eFromToByTyped r e1 e2 e3' (Just t) isStrictBound (Nothing, Nothing, Nothing) -> eFromToByTyped r e1 e2 e3 Nothing isStrictBound _ -> errorMessage r ["A sequence enumeration may have at most one element type annotation."] @@ -400,7 +400,7 @@ eFromToDownBy :: eFromToDownBy r e1 e2 e3 isStrictBound = case (asETyped e1, asETyped e2, asETyped e3) of (Just (e1', t), Nothing, Nothing) -> eFromToDownByTyped r e1' e2 e3 (Just t) isStrictBound - (Nothing, Just (e2', t), Nothing) -> eFromToDownByTyped r e1 e2' e3 (Just t) isStrictBound + (Nothing, Just (e2', t), Nothing) -> eFromToDownByTyped r e1 e2' e3 (Just t) isStrictBound (Nothing, Nothing, Just (e3', t)) -> eFromToDownByTyped r e1 e2 e3' (Just t) isStrictBound (Nothing, Nothing, Nothing) -> eFromToDownByTyped r e1 e2 e3 Nothing isStrictBound _ -> errorMessage r ["A sequence enumeration may have at most one element type annotation."] diff --git a/src/Cryptol/REPL/Monad.hs b/src/Cryptol/REPL/Monad.hs index 1e4f2871f..6f04fbb28 100644 --- a/src/Cryptol/REPL/Monad.hs +++ b/src/Cryptol/REPL/Monad.hs @@ -266,13 +266,13 @@ instance Functor REPL where instance Applicative REPL where {-# INLINE pure #-} - pure = return + pure x = REPL (\_ -> pure x) {-# INLINE (<*>) #-} (<*>) = ap instance Monad REPL where {-# INLINE return #-} - return x = REPL (\_ -> return x) + return = pure {-# INLINE (>>=) #-} m >>= f = REPL $ \ref -> do diff --git a/src/Cryptol/TypeCheck/Monad.hs b/src/Cryptol/TypeCheck/Monad.hs index fda532216..6f2951da1 100644 --- a/src/Cryptol/TypeCheck/Monad.hs +++ b/src/Cryptol/TypeCheck/Monad.hs @@ -293,11 +293,11 @@ instance Functor InferM where fmap f (IM m) = IM (fmap f m) instance A.Applicative InferM where - pure = return + pure x = IM (pure x) (<*>) = ap instance Monad InferM where - return x = IM (return x) + return = pure IM m >>= f = IM (m >>= unIM . f) instance Fail.MonadFail InferM where @@ -968,11 +968,11 @@ instance Functor KindM where fmap f (KM m) = KM (fmap f m) instance A.Applicative KindM where - pure = return + pure x = KM (pure x) (<*>) = ap instance Monad KindM where - return x = KM (return x) + return = pure KM m >>= k = KM (m >>= unKM . k) instance Fail.MonadFail KindM where diff --git a/src/Cryptol/TypeCheck/Sanity.hs b/src/Cryptol/TypeCheck/Sanity.hs index 63cb4f307..fc995288d 100644 --- a/src/Cryptol/TypeCheck/Sanity.hs +++ b/src/Cryptol/TypeCheck/Sanity.hs @@ -472,11 +472,11 @@ instance Functor TcM where fmap = liftM instance A.Applicative TcM where - pure = return + pure a = TcM (pure a) (<*>) = ap instance Monad TcM where - return a = TcM (return a) + return = pure TcM m >>= f = TcM (do a <- m let TcM m1 = f a m1) From 634844f7797421a9d83c87ffa6ca5debc17e6c5c Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 1 May 2022 08:36:01 -0400 Subject: [PATCH 4/7] Fix an -Woverlapping-patterns warning uncovered by GHC 9.2 GHC 9.2 has a more aggressive pattern-match coverage checker than in previous versions, which reveals that the `detailedPrompt` case of `mkPrompt` is unreachable. This is technically true, as `detailedPrompt = False`, but it would be nice if we didn't get a warning just for keeping this code around. This simplest solution is to just change `detailedPrompt` to be `id False`, which defeats the coverage checker. An alternative would be to use `GHC.Exts`' newly added `considerAccessible` function (see https://gitlab.haskell.org/ghc/ghc/-/merge_requests/5100), but this would require CPP. --- src/Cryptol/REPL/Monad.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cryptol/REPL/Monad.hs b/src/Cryptol/REPL/Monad.hs index 6f04fbb28..5476d5f62 100644 --- a/src/Cryptol/REPL/Monad.hs +++ b/src/Cryptol/REPL/Monad.hs @@ -218,7 +218,7 @@ mkPrompt rw | detailedPrompt = withEdit ++ "> " | otherwise = modLn ++ "> " where - detailedPrompt = False + detailedPrompt = id False modLn = case lName =<< eLoadedMod rw of From 1dd431141772996ceec9d7753327cfe24116383c Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 1 May 2022 09:19:06 -0400 Subject: [PATCH 5/7] Fix -Wincomplete-uni-patterns warnings GHC 9.2 now includes `-Wincomplete-uni-patterns` as a part of `-Wall`. As a result, building Cryptol with GHC 9.2 uncovers some previously undetected warnings. Some warnings can be fixed by rewriting the code slightly. For example, changing a use of `Data.List.groupBy` to `Data.List.NonEmpty.groupBy` avoids the need for an incomplete match on `(_ : _)` on the value that `groupBy` returns. (Since `Data.List.NonEmpty` was added to `base` in `4.9`, this also requires bumping the lower version bounds on `base` slightly.) Other warnings were fixed by explicitly adding fall-through `error` cases. The resulting code is no less partial than before, but it avoids warnings and should provide a more specific error in the event that the fall-through cases are reached. Yet another class of warnings are those caused by the use of irrefutable patterns, such as the definition of `ar1 ~[x] = x` in `Cryptol.TypeCheck.TypePat`. It's rather unfortunate that `-Wincomplete-uni-patterns` warns about these (see https://gitlab.haskell.org/ghc/ghc/-/issues/14800), as the only way to avoid the warning would be to rewrite these functions to use refutable patterns, thereby changing their strictness properties. I've decided to simply disable `-Wincomplete-uni-patterns` in each module that uses irrefutable patterns to avoid this issue. I've written also written a Note explaining the reasoning and referenced it in the affected modules. --- cryptol.cabal | 2 +- src/Cryptol/AES.hs | 6 +++-- src/Cryptol/Eval/Generic.hs | 6 ++++- src/Cryptol/Eval/Reference.lhs | 8 +++--- src/Cryptol/ModuleSystem/NamingEnv.hs | 2 ++ src/Cryptol/Parser/Layout.hs | 6 +++-- src/Cryptol/Parser/ParserUtils.hs | 2 ++ src/Cryptol/REPL/Command.hs | 2 ++ src/Cryptol/Symbolic/SBV.hs | 5 +++- src/Cryptol/Transform/MonoValues.hs | 9 ++++--- src/Cryptol/Transform/Specialize.hs | 3 +++ src/Cryptol/TypeCheck/CheckModuleInstance.hs | 2 ++ src/Cryptol/TypeCheck/Error.hs | 8 ++++-- src/Cryptol/TypeCheck/Infer.hs | 2 ++ src/Cryptol/TypeCheck/Kind.hs | 2 ++ src/Cryptol/TypeCheck/SimpType.hs | 2 ++ src/Cryptol/TypeCheck/TypePat.hs | 26 +++++++++++++++++++- 17 files changed, 75 insertions(+), 18 deletions(-) diff --git a/cryptol.cabal b/cryptol.cabal index 24fc1d546..66ef95480 100644 --- a/cryptol.cabal +++ b/cryptol.cabal @@ -40,7 +40,7 @@ flag relocatable library Default-language: Haskell2010 - Build-depends: base >= 4.8 && < 5, + Build-depends: base >= 4.9 && < 5, arithmoi >= 0.12, async >= 2.2 && < 2.3, base-compat >= 0.6 && < 0.13, diff --git a/src/Cryptol/AES.hs b/src/Cryptol/AES.hs index cd8c60c16..71e07dc26 100644 --- a/src/Cryptol/AES.hs +++ b/src/Cryptol/AES.hs @@ -294,8 +294,10 @@ keyExpansionWords nk key = genericTake (4*(nk+7)) keys subWordRcon :: Word32 -> GF28 -> Word32 subWordRcon w rc = fromBytes [a `xor` rc, b, c, d] - where [a, b, c, d] = map sbox $ toBytes w - + where (a, b, c, d) = + case map sbox $ toBytes w of + [a', b', c', d'] -> (a', b', c', d') + bs -> error $ "Unexpected list length in keyExpansionWords: " ++ show (length bs) -- | Definition of round-constants, as specified in Section 5.2 of the AES standard. -- We only need up to the 11th value for AES-128, and fewer than that for AES-192 diff --git a/src/Cryptol/Eval/Generic.hs b/src/Cryptol/Eval/Generic.hs index cecf701e4..204658b91 100644 --- a/src/Cryptol/Eval/Generic.hs +++ b/src/Cryptol/Eval/Generic.hs @@ -21,6 +21,8 @@ {-# LANGUAGE BangPatterns #-} {-# OPTIONS_GHC -fno-warn-orphans #-} +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.Eval.Generic where import qualified Control.Exception as X @@ -1864,7 +1866,9 @@ randomV sym ty seed = -- unpack the seed into four Word64s let mask64 = 0xFFFFFFFFFFFFFFFF unpack s = fromInteger (s .&. mask64) : unpack (s `shiftR` 64) - [a, b, c, d] = take 4 (unpack seed) + (a, b, c, d) = case take 4 (unpack seed) of + [a', b', c', d'] -> (a', b', c', d') + _ -> error "randomV: impossible (infinite seed is finite)" in fst $ gen 100 $ seedTFGen (a, b, c, d) -------------------------------------------------------------------------------- diff --git a/src/Cryptol/Eval/Reference.lhs b/src/Cryptol/Eval/Reference.lhs index f3abe9ab7..19a53b068 100644 --- a/src/Cryptol/Eval/Reference.lhs +++ b/src/Cryptol/Eval/Reference.lhs @@ -1556,17 +1556,17 @@ amount, but as lazy as possible in the list values. > > signedShiftRV :: Value > signedShiftRV = -> VNumPoly $ \(Nat n) -> pure $ +> VNumPoly $ \n -> pure $ > VPoly $ \ix -> pure $ > VFun $ \v -> pure $ > VFun $ \x -> > do amt <- cryToInteger ix x -> pure $ generateV (Nat n) $ \i -> +> pure $ generateV n $ \i -> > do vs <- fromVList <$> v > if i < amt then -> indexFront (Nat n) vs 0 +> indexFront n vs 0 > else -> indexFront (Nat n) vs (i - amt) +> indexFront n vs (i - amt) Indexing -------- diff --git a/src/Cryptol/ModuleSystem/NamingEnv.hs b/src/Cryptol/ModuleSystem/NamingEnv.hs index d83506cf5..91969b482 100644 --- a/src/Cryptol/ModuleSystem/NamingEnv.hs +++ b/src/Cryptol/ModuleSystem/NamingEnv.hs @@ -17,6 +17,8 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE BlockArguments #-} {-# LANGUAGE OverloadedStrings #-} +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.ModuleSystem.NamingEnv where import Data.List (nub) diff --git a/src/Cryptol/Parser/Layout.hs b/src/Cryptol/Parser/Layout.hs index 6508de120..28e4b241c 100644 --- a/src/Cryptol/Parser/Layout.hs +++ b/src/Cryptol/Parser/Layout.hs @@ -36,7 +36,7 @@ Implicit Layout Blocks - The implicit layout block is ended by: * a token than is less indented that the block, or - * `)`, `}`, `]`, or + * `)`, `}`, `]`, or * ',' but only if there is an outer paren block block's column. - When an implicit layout block ends, we insert a "virtual end block" @@ -141,7 +141,9 @@ layout isMod ts0 curTok : go stack lastVirt False advanceTokens where - curTok : advanceTokens = tokens + (curTok, advanceTokens) = case tokens of + (curTok' : advanceTokens') -> (curTok', advanceTokens') + [] -> error "layout: Unexpected empty list of tokens" curTokTy = tokenType (thing curTok) curRange = srcRange curTok curLoc = from curRange diff --git a/src/Cryptol/Parser/ParserUtils.hs b/src/Cryptol/Parser/ParserUtils.hs index f08ce63b9..5c910f8b8 100644 --- a/src/Cryptol/Parser/ParserUtils.hs +++ b/src/Cryptol/Parser/ParserUtils.hs @@ -13,6 +13,8 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE PatternGuards #-} {-# LANGUAGE OverloadedStrings #-} +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.Parser.ParserUtils where import Data.Maybe(fromMaybe) diff --git a/src/Cryptol/REPL/Command.hs b/src/Cryptol/REPL/Command.hs index 0ab500578..d28ea1e60 100644 --- a/src/Cryptol/REPL/Command.hs +++ b/src/Cryptol/REPL/Command.hs @@ -14,6 +14,8 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PatternGuards #-} {-# LANGUAGE RecordWildCards #-} +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.REPL.Command ( -- * Commands Command(..), CommandDescr(..), CommandBody(..), CommandExitCode(..) diff --git a/src/Cryptol/Symbolic/SBV.hs b/src/Cryptol/Symbolic/SBV.hs index 33a3a6e8b..7679c9648 100644 --- a/src/Cryptol/Symbolic/SBV.hs +++ b/src/Cryptol/Symbolic/SBV.hs @@ -420,7 +420,10 @@ processResults ProverCommand{..} ts results = mkTevs prims result = do -- It's a bit fragile, but the value of the safety predicate seems -- to always be the first value in the model assignment list. - let Right (_, (safetyCV : cvs)) = SBV.getModelAssignment result + let (safetyCV, cvs) = + case SBV.getModelAssignment result of + Right (_, (safetyCV' : cvs')) -> (safetyCV', cvs') + _ -> error "processResults: SBV.getModelAssignment failure" safety = SBV.cvToBool safetyCV (vs, _) = parseValues ts cvs mdl = computeModel prims ts vs diff --git a/src/Cryptol/Transform/MonoValues.hs b/src/Cryptol/Transform/MonoValues.hs index a7574fb54..baf4e80e1 100644 --- a/src/Cryptol/Transform/MonoValues.hs +++ b/src/Cryptol/Transform/MonoValues.hs @@ -84,9 +84,10 @@ import Cryptol.Parser.Position (emptyRange) import Cryptol.TypeCheck.AST hiding (splitTApp) -- XXX: just use this one import Cryptol.TypeCheck.TypeMap import Cryptol.Utils.Ident(Namespace(..)) -import Data.List(sortBy,groupBy) +import Data.List(sortBy) import Data.Either(partitionEithers) import Data.Map (Map) +import qualified Data.List.NonEmpty as NE import MonadLib hiding (mapM) import Prelude () @@ -224,7 +225,7 @@ rewDeclGroup rews dg = NonRecursive d -> NonRecursive <$> rewD rews d Recursive ds -> do let (leave,rew) = partitionEithers (map consider ds) - rewGroups = groupBy sameTParams + rewGroups = NE.groupBy sameTParams $ sortBy compareTParams rew ds1 <- mapM (rewD rews) leave ds2 <- mapM rewSame rewGroups @@ -243,10 +244,10 @@ rewDeclGroup rews dg = else Left d rewSame ds = - do new <- forM ds $ \(d,_,_,e) -> + do new <- forM (NE.toList ds) $ \(d,_,_,e) -> do x <- newName return (d, x, e) - let (_,tps,props,_) : _ = ds + let (_,tps,props,_) NE.:| _ = ds tys = map (TVar . tpVar) tps proofNum = length props addRew (d,x,_) = insertTM (dName d,tys,proofNum) x diff --git a/src/Cryptol/Transform/Specialize.hs b/src/Cryptol/Transform/Specialize.hs index 103f5a623..f71fb2f60 100644 --- a/src/Cryptol/Transform/Specialize.hs +++ b/src/Cryptol/Transform/Specialize.hs @@ -1,3 +1,6 @@ +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} + -- | -- Module : Cryptol.Transform.Specialize -- Copyright : (c) 2013-2016 Galois, Inc. diff --git a/src/Cryptol/TypeCheck/CheckModuleInstance.hs b/src/Cryptol/TypeCheck/CheckModuleInstance.hs index 396deb2f5..f5ca13c78 100644 --- a/src/Cryptol/TypeCheck/CheckModuleInstance.hs +++ b/src/Cryptol/TypeCheck/CheckModuleInstance.hs @@ -1,4 +1,6 @@ {-# Language OverloadedStrings #-} +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.TypeCheck.CheckModuleInstance (checkModuleInstance) where import Data.Map ( Map ) diff --git a/src/Cryptol/TypeCheck/Error.hs b/src/Cryptol/TypeCheck/Error.hs index 2a270f117..cdb542596 100644 --- a/src/Cryptol/TypeCheck/Error.hs +++ b/src/Cryptol/TypeCheck/Error.hs @@ -1,6 +1,8 @@ {-# Language FlexibleInstances, DeriveGeneric, DeriveAnyClass #-} {-# Language OverloadedStrings #-} {-# Language Safe #-} +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.TypeCheck.Error where import qualified Data.IntMap as IntMap @@ -504,7 +506,9 @@ explainUnsolvable names gs = case tNoUser (goal g) of TCon (PC pc) ts -> let tys = [ backticks (ppWithNames names t) | t <- ts ] - doc1 : _ = tys + doc1 = case tys of + (doc1' : _) -> doc1' + [] -> error "explainUnsolvable: Expected TCon to have at least one argument" custom msg = hang msg 2 (text "arising from" $$ pp (goalSource g) $$ @@ -570,7 +574,7 @@ explainUnsolvable names gs = PValidFloat -> case ts of - ~[e,p] -> + ~[e,p] -> custom (hang "Unsupported floating point parameters:" 2 ("exponent =" <+> ppWithNames names e $$ "precision =" <+> ppWithNames names p)) diff --git a/src/Cryptol/TypeCheck/Infer.hs b/src/Cryptol/TypeCheck/Infer.hs index 04ad2a441..369aa19b5 100644 --- a/src/Cryptol/TypeCheck/Infer.hs +++ b/src/Cryptol/TypeCheck/Infer.hs @@ -15,6 +15,8 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE BlockArguments #-} {-# LANGUAGE Safe #-} +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.TypeCheck.Infer ( checkE , checkSigB diff --git a/src/Cryptol/TypeCheck/Kind.hs b/src/Cryptol/TypeCheck/Kind.hs index dffa147ad..3625b40bd 100644 --- a/src/Cryptol/TypeCheck/Kind.hs +++ b/src/Cryptol/TypeCheck/Kind.hs @@ -8,6 +8,8 @@ {-# LANGUAGE RecursiveDo #-} {-# LANGUAGE Safe #-} +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.TypeCheck.Kind ( checkType , checkSchema diff --git a/src/Cryptol/TypeCheck/SimpType.hs b/src/Cryptol/TypeCheck/SimpType.hs index c88bebf74..cea736fb5 100644 --- a/src/Cryptol/TypeCheck/SimpType.hs +++ b/src/Cryptol/TypeCheck/SimpType.hs @@ -1,4 +1,6 @@ {-# LANGUAGE PatternGuards #-} +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] in Cryptol.TypeCheck.TypePat +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.TypeCheck.SimpType where import Control.Applicative((<|>)) diff --git a/src/Cryptol/TypeCheck/TypePat.hs b/src/Cryptol/TypeCheck/TypePat.hs index 6cb96d246..2a474c930 100644 --- a/src/Cryptol/TypeCheck/TypePat.hs +++ b/src/Cryptol/TypeCheck/TypePat.hs @@ -1,3 +1,5 @@ +-- See Note [-Wincomplete-uni-patterns and irrefutable patterns] +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} module Cryptol.TypeCheck.TypePat ( aInf, aNat, aNat' @@ -193,4 +195,26 @@ anError k = \a -> case tNoUser a of _ -> mzero - +{- +Note [-Wincomplete-uni-patterns and irrefutable patterns] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Various parts of Cryptol use irrefutable patterns in functions that assume that +their arguments have particular shapes. For example, the `ar1 ~[a] = a` +function in this module uses an irrefutable pattern because it assumes the +invariant that the argument list will have exactly one element. This lets ar1 +be slightly lazier when evaluated. + +Unfortunately, this use of irrefutable patterns is at odds with the +-Wincomplete-uni-patterns warning. At present, -Wincomplete-uni-patterns will +produce a warning for any irrefutable pattern that does not cover all possible +data constructors. While we could rewrite functions like `ar1` to explicitly +provide a fall-through case, that would change its strictness properties. As +a result, we simply disable -Wincomplete-uni-patterns warnings in each part +of Cryptol that uses irrefutable patterns. + +Arguably, -Wincomplete-uni-patterns shouldn't be producing warnings for +irrefutable patterns at all. GHC issue #14800 +(https://gitlab.haskell.org/ghc/ghc/-/issues/14800) proposes this idea. +If that issue is fixed in the future, we may want to reconsider whether we want +to disable -Wincomplete-uni-patterns. +-} From 86ee1c9f1b1beaf61d842aac5a3193a43739c857 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 1 May 2022 09:33:02 -0400 Subject: [PATCH 6/7] CI: Regenerate cabal.GHC-*.config files --- cabal.GHC-8.10.7.config | 78 ++++++++++++++++++++--------------------- cabal.GHC-8.8.4.config | 78 ++++++++++++++++++++--------------------- cabal.GHC-9.0.2.config | 78 ++++++++++++++++++++--------------------- 3 files changed, 117 insertions(+), 117 deletions(-) diff --git a/cabal.GHC-8.10.7.config b/cabal.GHC-8.10.7.config index 52d0a192d..47f6fa6e5 100644 --- a/cabal.GHC-8.10.7.config +++ b/cabal.GHC-8.10.7.config @@ -17,9 +17,8 @@ constraints: any.Cabal ==3.2.1.0, any.adjunctions ==4.4, any.aeson ==2.0.3.0, aeson -cffi +ordered-keymap, - any.alex ==3.2.6, - alex +small_base, - any.ansi-terminal ==0.11.1, + any.alex ==3.2.7.1, + any.ansi-terminal ==0.11.3, ansi-terminal -example, any.ansi-wl-pprint ==0.6.9, ansi-wl-pprint -example, @@ -36,11 +35,11 @@ constraints: any.Cabal ==3.2.1.0, attoparsec -developer, any.auto-update ==0.1.6, any.base ==4.14.3.0, - any.base-compat ==0.11.2, - any.base-compat-batteries ==0.11.2, + any.base-compat ==0.12.1, + any.base-compat-batteries ==0.12.1, any.base-orphans ==0.8.6, any.base64-bytestring ==1.2.1.0, - any.basement ==0.0.12, + any.basement ==0.0.14, any.bifunctors ==5.5.11, bifunctors +semigroups +tagged, any.bimap ==0.4.0, @@ -51,7 +50,7 @@ constraints: any.Cabal ==3.2.1.0, any.blaze-html ==0.9.1.2, any.blaze-markup ==0.8.2.8, any.bsb-http-chunked ==0.0.0.4, - any.bv-sized ==1.0.3, + any.bv-sized ==1.0.4, any.byteorder ==1.0.4, any.bytestring ==0.10.12.0, any.cabal-doctest ==1.0.9, @@ -63,19 +62,20 @@ constraints: any.Cabal ==3.2.1.0, cereal -bytestring-builder, any.chimera ==0.3.2.0, chimera +representable, - any.clock ==0.8.2, + any.clock ==0.8.3, clock -llvm, any.code-page ==0.2.1, any.colour ==2.3.6, any.comonad ==5.0.8, comonad +containers +distributive +indexed-traversable, - any.config-value ==0.8.2, - any.constraints ==0.13.2, + any.concurrent-extra ==0.7.0.12, + any.config-value ==0.8.2.1, + any.constraints ==0.13.3, any.containers ==0.6.5.1, any.contravariant ==1.5.5, contravariant +semigroups +statevar +tagged, any.cookie ==0.4.5, - any.criterion ==1.5.12.0, + any.criterion ==1.5.13.0, criterion -embed-data-files -fast, any.criterion-measurement ==0.1.3.0, criterion-measurement -fast, @@ -84,7 +84,7 @@ constraints: any.Cabal ==3.2.1.0, cryptol +relocatable -static, cryptol-remote-api -notthreaded -static, cryptol-test-runner -static, - any.cryptonite ==0.29, + any.cryptonite ==0.30, cryptonite -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq -support_pclmuldq +support_rdrand -support_sse +use_target_attributes, any.data-binary-ieee754 ==0.4.4, any.data-default-class ==0.1.2.0, @@ -101,15 +101,15 @@ constraints: any.Cabal ==3.2.1.0, any.easy-file ==0.2.2, any.entropy ==0.4.1.7, entropy -halvm, - any.exact-pi ==0.5.0.1, + any.exact-pi ==0.5.0.2, any.exceptions ==0.10.4, any.extensible-exceptions ==0.1.1.4, any.extra ==1.7.10, any.fail ==4.9.0.0, - any.fast-logger ==3.1.0, + any.fast-logger ==3.1.1, any.filelock ==0.1.1.5, any.filepath ==1.4.2.1, - any.fingertree ==0.1.4.2, + any.fingertree ==0.1.5.0, any.free ==5.1.7, any.ghc-boot-th ==8.10.7, any.ghc-prim ==0.6.1, @@ -127,7 +127,7 @@ constraints: any.Cabal ==3.2.1.0, hsc2hs -in-ghc-tree, any.http-date ==0.0.11, any.http-types ==0.12.3, - any.http2 ==3.0.2, + any.http2 ==3.0.3, http2 -devel -doc -h2spec, any.indexed-traversable ==0.1.2, any.indexed-traversable-instances ==0.1.1, @@ -141,7 +141,7 @@ constraints: any.Cabal ==3.2.1.0, any.iproute ==1.7.12, any.js-chart ==2.9.4.1, any.kan-extensions ==5.2.3, - any.lens ==5.0.1, + any.lens ==5.1, lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy, any.libBF ==0.6.3, libBF -system-libbf, @@ -149,8 +149,8 @@ constraints: any.Cabal ==3.2.1.0, math-functions +system-erf +system-expm1, any.megaparsec ==9.2.0, megaparsec -dev, - any.memory ==0.16.0, - memory +support_basement +support_bytestring +support_deepseq +support_foundation, + any.memory ==0.17.0, + memory +support_bytestring +support_deepseq, any.microstache ==1.0.2, any.mod ==0.1.2.2, mod +semirings +vector, @@ -158,15 +158,15 @@ constraints: any.Cabal ==3.2.1.0, any.monad-par ==0.3.5, monad-par -chaselev -newgeneric, any.monad-par-extras ==0.3.3, - any.monadLib ==3.10, + any.monadLib ==3.10.1, any.mtl ==2.2.2, any.mwc-random ==0.15.0.2, any.nats ==1.1.2, nats +binary +hashable +template-haskell, - any.network ==3.1.2.5, + any.network ==3.1.2.7, network -devel, any.network-byte-order ==0.1.6, - any.network-info ==0.2.0.10, + any.network-info ==0.2.1, any.newtype-generics ==0.6.1, any.numtype-dk ==0.5.0.3, any.old-locale ==1.0.0.7, @@ -175,7 +175,7 @@ constraints: any.Cabal ==3.2.1.0, optparse-applicative +process, any.panic ==0.4.0.1, any.parallel ==3.2.2.0, - any.parameterized-utils ==2.1.4.0, + any.parameterized-utils ==2.1.5.0, parameterized-utils +unsafe-operations, any.parsec ==3.1.14.0, any.parser-combinators ==1.3.0, @@ -200,7 +200,7 @@ constraints: any.Cabal ==3.2.1.0, any.resourcet ==1.2.4.3, any.rts ==1.0.1, any.safe ==0.3.19, - any.sbv ==8.16, + any.sbv ==9.0, any.scientific ==0.3.7.0, scientific -bytestring-builder -integer-simple, any.scotty ==0.12, @@ -219,9 +219,9 @@ constraints: any.Cabal ==3.2.1.0, any.simple-smt ==0.9.7, any.splitmix ==0.1.0.4, splitmix -optimised-mixer, - any.statistics ==0.16.0.1, + any.statistics ==0.16.0.2, any.stm ==2.5.0.1, - any.streaming-commons ==0.2.2.3, + any.streaming-commons ==0.2.2.4, streaming-commons -use-bytestring-builder, any.strict ==0.4.0.1, strict +assoc, @@ -252,7 +252,7 @@ constraints: any.Cabal ==3.2.1.0, any.time-compat ==1.9.6.1, time-compat -old-locale, any.time-manager ==0.0.0, - any.tls ==1.5.6, + any.tls ==1.5.7, tls +compat -hans +network, any.tls-session-manager ==0.0.4, any.transformers ==0.5.6.2, @@ -267,9 +267,9 @@ constraints: any.Cabal ==3.2.1.0, any.unix-compat ==0.5.4, unix-compat -old-time, any.unix-time ==0.4.7, - any.unliftio ==0.2.20, + any.unliftio ==0.2.22.0, any.unliftio-core ==0.2.0.1, - any.unordered-containers ==0.2.16.0, + any.unordered-containers ==0.2.19.1, unordered-containers -debug, any.utf8-string ==1.0.2, any.uuid ==1.3.15, @@ -282,15 +282,15 @@ constraints: any.Cabal ==3.2.1.0, vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks, any.vector-binary-instances ==0.2.5.2, any.vector-th-unbox ==0.2.2, - any.versions ==5.0.1, + any.versions ==5.0.3, any.void ==0.7.3, void -safe, any.wai ==3.2.3, - any.wai-extra ==3.1.8, + any.wai-extra ==3.1.10, wai-extra -build-example, - any.wai-logger ==2.3.7, - any.warp ==3.3.18, - warp +allow-sendfilefd -network-bytestring -warp-debug, + any.wai-logger ==2.4.0, + any.warp ==3.3.20, + warp +allow-sendfilefd -network-bytestring -warp-debug +x509, any.warp-tls ==3.3.2, any.wcwidth ==0.0.2, wcwidth -cli +split-base, @@ -298,12 +298,12 @@ constraints: any.Cabal ==3.2.1.0, what4 -drealtestdisable -solvertests -stptestdisable, any.witherable ==0.4.2, any.word8 ==0.1.3, - any.x509 ==1.7.5, - any.x509-store ==1.6.7, - any.x509-validation ==1.6.11, + any.x509 ==1.7.6, + any.x509-store ==1.6.9, + any.x509-validation ==1.6.12, any.xml ==1.3.14, any.zenc ==0.1.2, - any.zlib ==0.6.2.3, + any.zlib ==0.6.3.0, zlib -bundled-c-zlib -non-blocking-ffi -pkg-config, any.zlib-bindings ==0.1.1.5 -index-state: hackage.haskell.org 2022-04-21T14:15:08Z +index-state: hackage.haskell.org 2022-05-04T18:13:54Z diff --git a/cabal.GHC-8.8.4.config b/cabal.GHC-8.8.4.config index bf3ba22fd..eef2cd6fe 100644 --- a/cabal.GHC-8.8.4.config +++ b/cabal.GHC-8.8.4.config @@ -17,9 +17,8 @@ constraints: any.Cabal ==3.0.1.0, any.adjunctions ==4.4, any.aeson ==2.0.3.0, aeson -cffi +ordered-keymap, - any.alex ==3.2.6, - alex +small_base, - any.ansi-terminal ==0.11.1, + any.alex ==3.2.7.1, + any.ansi-terminal ==0.11.3, ansi-terminal -example, any.ansi-wl-pprint ==0.6.9, ansi-wl-pprint -example, @@ -36,11 +35,11 @@ constraints: any.Cabal ==3.0.1.0, attoparsec -developer, any.auto-update ==0.1.6, any.base ==4.13.0.0, - any.base-compat ==0.11.2, - any.base-compat-batteries ==0.11.2, + any.base-compat ==0.12.1, + any.base-compat-batteries ==0.12.1, any.base-orphans ==0.8.6, any.base64-bytestring ==1.2.1.0, - any.basement ==0.0.12, + any.basement ==0.0.14, any.bifunctors ==5.5.11, bifunctors +semigroups +tagged, any.bimap ==0.4.0, @@ -51,7 +50,7 @@ constraints: any.Cabal ==3.0.1.0, any.blaze-html ==0.9.1.2, any.blaze-markup ==0.8.2.8, any.bsb-http-chunked ==0.0.0.4, - any.bv-sized ==1.0.3, + any.bv-sized ==1.0.4, any.byteorder ==1.0.4, any.bytestring ==0.10.10.1, any.cabal-doctest ==1.0.9, @@ -63,19 +62,20 @@ constraints: any.Cabal ==3.0.1.0, cereal -bytestring-builder, any.chimera ==0.3.2.0, chimera +representable, - any.clock ==0.8.2, + any.clock ==0.8.3, clock -llvm, any.code-page ==0.2.1, any.colour ==2.3.6, any.comonad ==5.0.8, comonad +containers +distributive +indexed-traversable, - any.config-value ==0.8.2, - any.constraints ==0.13.2, + any.concurrent-extra ==0.7.0.12, + any.config-value ==0.8.2.1, + any.constraints ==0.13.3, any.containers ==0.6.2.1, any.contravariant ==1.5.5, contravariant +semigroups +statevar +tagged, any.cookie ==0.4.5, - any.criterion ==1.5.12.0, + any.criterion ==1.5.13.0, criterion -embed-data-files -fast, any.criterion-measurement ==0.1.3.0, criterion-measurement -fast, @@ -84,7 +84,7 @@ constraints: any.Cabal ==3.0.1.0, cryptol +relocatable -static, cryptol-remote-api -notthreaded -static, cryptol-test-runner -static, - any.cryptonite ==0.29, + any.cryptonite ==0.30, cryptonite -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq -support_pclmuldq +support_rdrand -support_sse +use_target_attributes, any.data-binary-ieee754 ==0.4.4, any.data-default-class ==0.1.2.0, @@ -101,16 +101,16 @@ constraints: any.Cabal ==3.0.1.0, any.easy-file ==0.2.2, any.entropy ==0.4.1.7, entropy -halvm, - any.exact-pi ==0.5.0.1, + any.exact-pi ==0.5.0.2, any.exceptions ==0.10.4, exceptions +transformers-0-4, any.extensible-exceptions ==0.1.1.4, any.extra ==1.7.10, any.fail ==4.9.0.0, - any.fast-logger ==3.1.0, + any.fast-logger ==3.1.1, any.filelock ==0.1.1.5, any.filepath ==1.4.2.1, - any.fingertree ==0.1.4.2, + any.fingertree ==0.1.5.0, any.free ==5.1.7, any.ghc-boot-th ==8.8.4, any.ghc-prim ==0.5.3, @@ -128,7 +128,7 @@ constraints: any.Cabal ==3.0.1.0, hsc2hs -in-ghc-tree, any.http-date ==0.0.11, any.http-types ==0.12.3, - any.http2 ==3.0.2, + any.http2 ==3.0.3, http2 -devel -doc -h2spec, any.indexed-traversable ==0.1.2, any.indexed-traversable-instances ==0.1.1, @@ -142,7 +142,7 @@ constraints: any.Cabal ==3.0.1.0, any.iproute ==1.7.12, any.js-chart ==2.9.4.1, any.kan-extensions ==5.2.3, - any.lens ==5.0.1, + any.lens ==5.1, lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy, any.libBF ==0.6.3, libBF -system-libbf, @@ -150,8 +150,8 @@ constraints: any.Cabal ==3.0.1.0, math-functions +system-erf +system-expm1, any.megaparsec ==9.2.0, megaparsec -dev, - any.memory ==0.16.0, - memory +support_basement +support_bytestring +support_deepseq +support_foundation, + any.memory ==0.17.0, + memory +support_bytestring +support_deepseq, any.microstache ==1.0.2, any.mod ==0.1.2.2, mod +semirings +vector, @@ -159,15 +159,15 @@ constraints: any.Cabal ==3.0.1.0, any.monad-par ==0.3.5, monad-par -chaselev -newgeneric, any.monad-par-extras ==0.3.3, - any.monadLib ==3.10, + any.monadLib ==3.10.1, any.mtl ==2.2.2, any.mwc-random ==0.15.0.2, any.nats ==1.1.2, nats +binary +hashable +template-haskell, - any.network ==3.1.2.5, + any.network ==3.1.2.7, network -devel, any.network-byte-order ==0.1.6, - any.network-info ==0.2.0.10, + any.network-info ==0.2.1, any.newtype-generics ==0.6.1, any.numtype-dk ==0.5.0.3, any.old-locale ==1.0.0.7, @@ -176,7 +176,7 @@ constraints: any.Cabal ==3.0.1.0, optparse-applicative +process, any.panic ==0.4.0.1, any.parallel ==3.2.2.0, - any.parameterized-utils ==2.1.4.0, + any.parameterized-utils ==2.1.5.0, parameterized-utils +unsafe-operations, any.parsec ==3.1.14.0, any.parser-combinators ==1.3.0, @@ -201,7 +201,7 @@ constraints: any.Cabal ==3.0.1.0, any.resourcet ==1.2.4.3, any.rts ==1.0, any.safe ==0.3.19, - any.sbv ==8.16, + any.sbv ==9.0, any.scientific ==0.3.7.0, scientific -bytestring-builder -integer-simple, any.scotty ==0.12, @@ -220,9 +220,9 @@ constraints: any.Cabal ==3.0.1.0, any.simple-smt ==0.9.7, any.splitmix ==0.1.0.4, splitmix -optimised-mixer, - any.statistics ==0.16.0.1, + any.statistics ==0.16.0.2, any.stm ==2.5.0.0, - any.streaming-commons ==0.2.2.3, + any.streaming-commons ==0.2.2.4, streaming-commons -use-bytestring-builder, any.strict ==0.4.0.1, strict +assoc, @@ -253,7 +253,7 @@ constraints: any.Cabal ==3.0.1.0, any.time-compat ==1.9.6.1, time-compat -old-locale, any.time-manager ==0.0.0, - any.tls ==1.5.6, + any.tls ==1.5.7, tls +compat -hans +network, any.tls-session-manager ==0.0.4, any.transformers ==0.5.6.2, @@ -268,9 +268,9 @@ constraints: any.Cabal ==3.0.1.0, any.unix-compat ==0.5.4, unix-compat -old-time, any.unix-time ==0.4.7, - any.unliftio ==0.2.20, + any.unliftio ==0.2.22.0, any.unliftio-core ==0.2.0.1, - any.unordered-containers ==0.2.16.0, + any.unordered-containers ==0.2.19.1, unordered-containers -debug, any.utf8-string ==1.0.2, any.uuid ==1.3.15, @@ -283,15 +283,15 @@ constraints: any.Cabal ==3.0.1.0, vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks, any.vector-binary-instances ==0.2.5.2, any.vector-th-unbox ==0.2.2, - any.versions ==5.0.1, + any.versions ==5.0.3, any.void ==0.7.3, void -safe, any.wai ==3.2.3, - any.wai-extra ==3.1.8, + any.wai-extra ==3.1.10, wai-extra -build-example, - any.wai-logger ==2.3.7, - any.warp ==3.3.18, - warp +allow-sendfilefd -network-bytestring -warp-debug, + any.wai-logger ==2.4.0, + any.warp ==3.3.20, + warp +allow-sendfilefd -network-bytestring -warp-debug +x509, any.warp-tls ==3.3.2, any.wcwidth ==0.0.2, wcwidth -cli +split-base, @@ -299,12 +299,12 @@ constraints: any.Cabal ==3.0.1.0, what4 -drealtestdisable -solvertests -stptestdisable, any.witherable ==0.4.2, any.word8 ==0.1.3, - any.x509 ==1.7.5, - any.x509-store ==1.6.7, - any.x509-validation ==1.6.11, + any.x509 ==1.7.6, + any.x509-store ==1.6.9, + any.x509-validation ==1.6.12, any.xml ==1.3.14, any.zenc ==0.1.2, - any.zlib ==0.6.2.3, + any.zlib ==0.6.3.0, zlib -bundled-c-zlib -non-blocking-ffi -pkg-config, any.zlib-bindings ==0.1.1.5 -index-state: hackage.haskell.org 2022-04-21T14:15:08Z +index-state: hackage.haskell.org 2022-05-04T18:13:54Z diff --git a/cabal.GHC-9.0.2.config b/cabal.GHC-9.0.2.config index 9dfb50d71..7e5d18e2c 100644 --- a/cabal.GHC-9.0.2.config +++ b/cabal.GHC-9.0.2.config @@ -17,9 +17,8 @@ constraints: any.Cabal ==3.4.1.0, any.adjunctions ==4.4, any.aeson ==2.0.3.0, aeson -cffi +ordered-keymap, - any.alex ==3.2.6, - alex +small_base, - any.ansi-terminal ==0.11.1, + any.alex ==3.2.7.1, + any.ansi-terminal ==0.11.3, ansi-terminal -example, any.ansi-wl-pprint ==0.6.9, ansi-wl-pprint -example, @@ -36,11 +35,11 @@ constraints: any.Cabal ==3.4.1.0, attoparsec -developer, any.auto-update ==0.1.6, any.base ==4.15.1.0, - any.base-compat ==0.11.2, - any.base-compat-batteries ==0.11.2, + any.base-compat ==0.12.1, + any.base-compat-batteries ==0.12.1, any.base-orphans ==0.8.6, any.base64-bytestring ==1.2.1.0, - any.basement ==0.0.12, + any.basement ==0.0.14, any.bifunctors ==5.5.11, bifunctors +semigroups +tagged, any.bimap ==0.4.0, @@ -51,7 +50,7 @@ constraints: any.Cabal ==3.4.1.0, any.blaze-html ==0.9.1.2, any.blaze-markup ==0.8.2.8, any.bsb-http-chunked ==0.0.0.4, - any.bv-sized ==1.0.3, + any.bv-sized ==1.0.4, any.byteorder ==1.0.4, any.bytestring ==0.10.12.1, any.cabal-doctest ==1.0.9, @@ -63,19 +62,20 @@ constraints: any.Cabal ==3.4.1.0, cereal -bytestring-builder, any.chimera ==0.3.2.0, chimera +representable, - any.clock ==0.8.2, + any.clock ==0.8.3, clock -llvm, any.code-page ==0.2.1, any.colour ==2.3.6, any.comonad ==5.0.8, comonad +containers +distributive +indexed-traversable, - any.config-value ==0.8.2, - any.constraints ==0.13.2, + any.concurrent-extra ==0.7.0.12, + any.config-value ==0.8.2.1, + any.constraints ==0.13.3, any.containers ==0.6.4.1, any.contravariant ==1.5.5, contravariant +semigroups +statevar +tagged, any.cookie ==0.4.5, - any.criterion ==1.5.12.0, + any.criterion ==1.5.13.0, criterion -embed-data-files -fast, any.criterion-measurement ==0.1.3.0, criterion-measurement -fast, @@ -84,7 +84,7 @@ constraints: any.Cabal ==3.4.1.0, cryptol +relocatable -static, cryptol-remote-api -notthreaded -static, cryptol-test-runner -static, - any.cryptonite ==0.29, + any.cryptonite ==0.30, cryptonite -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq -support_pclmuldq +support_rdrand -support_sse +use_target_attributes, any.data-binary-ieee754 ==0.4.4, any.data-default-class ==0.1.2.0, @@ -101,15 +101,15 @@ constraints: any.Cabal ==3.4.1.0, any.easy-file ==0.2.2, any.entropy ==0.4.1.7, entropy -halvm, - any.exact-pi ==0.5.0.1, + any.exact-pi ==0.5.0.2, any.exceptions ==0.10.4, any.extensible-exceptions ==0.1.1.4, any.extra ==1.7.10, any.fail ==4.9.0.0, - any.fast-logger ==3.1.0, + any.fast-logger ==3.1.1, any.filelock ==0.1.1.5, any.filepath ==1.4.2.1, - any.fingertree ==0.1.4.2, + any.fingertree ==0.1.5.0, any.free ==5.1.7, any.ghc-bignum ==1.1, any.ghc-boot-th ==9.0.2, @@ -128,7 +128,7 @@ constraints: any.Cabal ==3.4.1.0, hsc2hs -in-ghc-tree, any.http-date ==0.0.11, any.http-types ==0.12.3, - any.http2 ==3.0.2, + any.http2 ==3.0.3, http2 -devel -doc -h2spec, any.indexed-traversable ==0.1.2, any.indexed-traversable-instances ==0.1.1, @@ -142,7 +142,7 @@ constraints: any.Cabal ==3.4.1.0, any.iproute ==1.7.12, any.js-chart ==2.9.4.1, any.kan-extensions ==5.2.3, - any.lens ==5.0.1, + any.lens ==5.1, lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy, any.libBF ==0.6.3, libBF -system-libbf, @@ -150,8 +150,8 @@ constraints: any.Cabal ==3.4.1.0, math-functions +system-erf +system-expm1, any.megaparsec ==9.2.0, megaparsec -dev, - any.memory ==0.16.0, - memory +support_basement +support_bytestring +support_deepseq +support_foundation, + any.memory ==0.17.0, + memory +support_bytestring +support_deepseq, any.microstache ==1.0.2, any.mod ==0.1.2.2, mod +semirings +vector, @@ -159,15 +159,15 @@ constraints: any.Cabal ==3.4.1.0, any.monad-par ==0.3.5, monad-par -chaselev -newgeneric, any.monad-par-extras ==0.3.3, - any.monadLib ==3.10, + any.monadLib ==3.10.1, any.mtl ==2.2.2, any.mwc-random ==0.15.0.2, any.nats ==1.1.2, nats +binary +hashable +template-haskell, - any.network ==3.1.2.5, + any.network ==3.1.2.7, network -devel, any.network-byte-order ==0.1.6, - any.network-info ==0.2.0.10, + any.network-info ==0.2.1, any.newtype-generics ==0.6.1, any.numtype-dk ==0.5.0.3, any.old-locale ==1.0.0.7, @@ -176,7 +176,7 @@ constraints: any.Cabal ==3.4.1.0, optparse-applicative +process, any.panic ==0.4.0.1, any.parallel ==3.2.2.0, - any.parameterized-utils ==2.1.4.0, + any.parameterized-utils ==2.1.5.0, parameterized-utils +unsafe-operations, any.parsec ==3.1.14.0, any.parser-combinators ==1.3.0, @@ -201,7 +201,7 @@ constraints: any.Cabal ==3.4.1.0, any.resourcet ==1.2.4.3, any.rts ==1.0.2, any.safe ==0.3.19, - any.sbv ==8.16, + any.sbv ==9.0, any.scientific ==0.3.7.0, scientific -bytestring-builder -integer-simple, any.scotty ==0.12, @@ -220,9 +220,9 @@ constraints: any.Cabal ==3.4.1.0, any.simple-smt ==0.9.7, any.splitmix ==0.1.0.4, splitmix -optimised-mixer, - any.statistics ==0.16.0.1, + any.statistics ==0.16.0.2, any.stm ==2.5.0.0, - any.streaming-commons ==0.2.2.3, + any.streaming-commons ==0.2.2.4, streaming-commons -use-bytestring-builder, any.strict ==0.4.0.1, strict +assoc, @@ -253,7 +253,7 @@ constraints: any.Cabal ==3.4.1.0, any.time-compat ==1.9.6.1, time-compat -old-locale, any.time-manager ==0.0.0, - any.tls ==1.5.6, + any.tls ==1.5.7, tls +compat -hans +network, any.tls-session-manager ==0.0.4, any.transformers ==0.5.6.2, @@ -268,9 +268,9 @@ constraints: any.Cabal ==3.4.1.0, any.unix-compat ==0.5.4, unix-compat -old-time, any.unix-time ==0.4.7, - any.unliftio ==0.2.20, + any.unliftio ==0.2.22.0, any.unliftio-core ==0.2.0.1, - any.unordered-containers ==0.2.16.0, + any.unordered-containers ==0.2.19.1, unordered-containers -debug, any.utf8-string ==1.0.2, any.uuid ==1.3.15, @@ -283,15 +283,15 @@ constraints: any.Cabal ==3.4.1.0, vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks, any.vector-binary-instances ==0.2.5.2, any.vector-th-unbox ==0.2.2, - any.versions ==5.0.1, + any.versions ==5.0.3, any.void ==0.7.3, void -safe, any.wai ==3.2.3, - any.wai-extra ==3.1.8, + any.wai-extra ==3.1.10, wai-extra -build-example, - any.wai-logger ==2.3.7, - any.warp ==3.3.18, - warp +allow-sendfilefd -network-bytestring -warp-debug, + any.wai-logger ==2.4.0, + any.warp ==3.3.20, + warp +allow-sendfilefd -network-bytestring -warp-debug +x509, any.warp-tls ==3.3.2, any.wcwidth ==0.0.2, wcwidth -cli +split-base, @@ -299,12 +299,12 @@ constraints: any.Cabal ==3.4.1.0, what4 -drealtestdisable -solvertests -stptestdisable, any.witherable ==0.4.2, any.word8 ==0.1.3, - any.x509 ==1.7.5, - any.x509-store ==1.6.7, - any.x509-validation ==1.6.11, + any.x509 ==1.7.6, + any.x509-store ==1.6.9, + any.x509-validation ==1.6.12, any.xml ==1.3.14, any.zenc ==0.1.2, - any.zlib ==0.6.2.3, + any.zlib ==0.6.3.0, zlib -bundled-c-zlib -non-blocking-ffi -pkg-config, any.zlib-bindings ==0.1.1.5 -index-state: hackage.haskell.org 2022-04-21T14:15:08Z +index-state: hackage.haskell.org 2022-05-04T18:13:54Z From 22c61d6907c27422d6d2e6374585745c71ff37a2 Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sun, 1 May 2022 09:33:08 -0400 Subject: [PATCH 7/7] CI: Test GHC 9.2.2 --- .github/workflows/ci.yml | 4 +- README.md | 4 +- cabal.GHC-9.2.2.config | 310 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 315 insertions(+), 3 deletions(-) create mode 100644 cabal.GHC-9.2.2.config diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ddfc94bc6..78153d5e5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,13 +59,15 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] - ghc-version: ["8.8.4", "8.10.7", "9.0.2"] + ghc-version: ["8.8.4", "8.10.7", "9.0.2", "9.2.2"] exclude: # https://gitlab.haskell.org/ghc/ghc/-/issues/18550 - os: windows-latest ghc-version: 8.10.7 - os: windows-latest ghc-version: 9.0.2 + - os: windows-latest + ghc-version: 9.2.2 outputs: test-lib-json: ${{ steps.test-lib.outputs.targets-json }} env: diff --git a/README.md b/README.md index c6dcb2031..56955e33c 100644 --- a/README.md +++ b/README.md @@ -81,8 +81,8 @@ Windows. We regularly build and test it in the following environments: ## Prerequisites Cryptol is regularly built and tested with the three most recent -versions of GHC, which at the time of this writing are 8.8.4, 8.10.7, and -9.0.2. The easiest way to install an approporiate version of GHC is +versions of GHC, which at the time of this writing are 8.10.7, 9.0.2, and +9.2.2. The easiest way to install an approporiate version of GHC is with [ghcup](https://www.haskell.org/ghcup/). Some supporting non-Haskell libraries are required to build diff --git a/cabal.GHC-9.2.2.config b/cabal.GHC-9.2.2.config new file mode 100644 index 000000000..db68aade8 --- /dev/null +++ b/cabal.GHC-9.2.2.config @@ -0,0 +1,310 @@ +active-repositories: hackage.haskell.org:merge +constraints: any.Cabal ==3.6.3.0, + any.Glob ==0.10.2, + any.GraphSCC ==1.0.4, + GraphSCC -use-maps, + any.HUnit ==1.6.2.0, + any.MemoTrie ==0.6.10, + MemoTrie -examples, + any.OneTuple ==0.3.1, + any.Only ==0.1, + any.QuickCheck ==2.14.2, + QuickCheck -old-random +templatehaskell, + any.StateVar ==1.2.2, + any.abstract-deque ==0.3, + abstract-deque -usecas, + any.abstract-par ==0.3.3, + any.adjunctions ==4.4, + any.aeson ==2.0.3.0, + aeson -cffi +ordered-keymap, + any.alex ==3.2.7.1, + any.ansi-terminal ==0.11.3, + ansi-terminal -example, + any.ansi-wl-pprint ==0.6.9, + ansi-wl-pprint -example, + any.appar ==0.1.8, + any.arithmoi ==0.12.0.1, + any.array ==0.5.4.0, + any.asn1-encoding ==0.9.6, + any.asn1-parse ==0.9.5, + any.asn1-types ==0.3.4, + any.assoc ==1.0.2, + any.async ==2.2.4, + async -bench, + any.attoparsec ==0.14.4, + attoparsec -developer, + any.auto-update ==0.1.6, + any.base ==4.16.1.0, + any.base-compat ==0.12.1, + any.base-compat-batteries ==0.12.1, + any.base-orphans ==0.8.6, + any.base64-bytestring ==1.2.1.0, + any.basement ==0.0.14, + any.bifunctors ==5.5.11, + bifunctors +semigroups +tagged, + any.bimap ==0.4.0, + any.binary ==0.8.9.0, + any.binary-orphans ==1.0.2, + any.bitwise ==1.0.0.1, + any.blaze-builder ==0.4.2.2, + any.blaze-html ==0.9.1.2, + any.blaze-markup ==0.8.2.8, + any.bsb-http-chunked ==0.0.0.4, + any.bv-sized ==1.0.4, + any.byteorder ==1.0.4, + any.bytestring ==0.11.3.0, + any.cabal-doctest ==1.0.9, + any.call-stack ==0.4.0, + any.case-insensitive ==1.2.1.0, + any.cassava ==0.5.2.0, + cassava -bytestring--lt-0_10_4, + any.cereal ==0.5.8.2, + cereal -bytestring-builder, + any.chimera ==0.3.2.0, + chimera +representable, + any.clock ==0.8.3, + clock -llvm, + any.code-page ==0.2.1, + any.colour ==2.3.6, + any.comonad ==5.0.8, + comonad +containers +distributive +indexed-traversable, + any.concurrent-extra ==0.7.0.12, + any.config-value ==0.8.2.1, + any.constraints ==0.13.3, + any.containers ==0.6.5.1, + any.contravariant ==1.5.5, + contravariant +semigroups +statevar +tagged, + any.cookie ==0.4.5, + any.criterion ==1.5.13.0, + criterion -embed-data-files -fast, + any.criterion-measurement ==0.1.3.0, + criterion-measurement -fast, + any.cryptohash-md5 ==0.11.101.0, + any.cryptohash-sha1 ==0.11.101.0, + cryptol +relocatable -static, + cryptol-remote-api -notthreaded -static, + cryptol-test-runner -static, + any.cryptonite ==0.30, + cryptonite -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq -support_pclmuldq +support_rdrand -support_sse +use_target_attributes, + any.data-binary-ieee754 ==0.4.4, + any.data-default-class ==0.1.2.0, + any.data-fix ==0.3.2, + any.deepseq ==1.4.6.1, + any.dense-linear-algebra ==0.1.0.0, + any.deriving-compat ==0.6, + deriving-compat +base-4-9 +new-functor-classes +template-haskell-2-11, + any.directory ==1.3.6.2, + any.distributive ==0.6.2.1, + distributive +semigroups +tagged, + any.dlist ==1.0, + dlist -werror, + any.easy-file ==0.2.2, + any.entropy ==0.4.1.7, + entropy -halvm, + any.exact-pi ==0.5.0.2, + any.exceptions ==0.10.4, + any.extensible-exceptions ==0.1.1.4, + any.extra ==1.7.10, + any.fail ==4.9.0.0, + any.fast-logger ==3.1.1, + any.filelock ==0.1.1.5, + any.filepath ==1.4.2.2, + any.fingertree ==0.1.5.0, + any.free ==5.1.7, + any.ghc-bignum ==1.2, + any.ghc-boot-th ==9.2.2, + any.ghc-prim ==0.8.0, + any.gitrev ==1.3.1, + any.happy ==1.20.0, + any.hashable ==1.3.5.0, + hashable +integer-gmp -random-initial-seed, + any.hashtables ==1.2.4.2, + hashtables -bounds-checking -debug -detailed-profiling -portable -sse42 +unsafe-tricks, + any.haskeline ==0.8.2, + any.heredoc ==0.2.0.0, + any.hostname ==1.0, + any.hourglass ==0.2.12, + any.hsc2hs ==0.68.8, + hsc2hs -in-ghc-tree, + any.http-date ==0.0.11, + any.http-types ==0.12.3, + any.http2 ==3.0.3, + http2 -devel -doc -h2spec, + any.indexed-traversable ==0.1.2, + any.indexed-traversable-instances ==0.1.1, + any.integer-gmp ==1.1, + any.integer-logarithms ==1.0.3.1, + integer-logarithms -check-bounds +integer-gmp, + any.integer-roots ==1.0.2.0, + any.invariant ==0.5.5, + any.io-streams ==1.5.2.1, + io-streams +network -nointeractivetests +zlib, + any.iproute ==1.7.12, + any.js-chart ==2.9.4.1, + any.kan-extensions ==5.2.3, + any.lens ==5.1, + lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy, + any.libBF ==0.6.3, + libBF -system-libbf, + any.math-functions ==0.3.4.2, + math-functions +system-erf +system-expm1, + any.megaparsec ==9.2.0, + megaparsec -dev, + any.memory ==0.17.0, + memory +support_bytestring +support_deepseq, + any.microstache ==1.0.2, + any.mod ==0.1.2.2, + mod +semirings +vector, + any.monad-control ==1.0.3.1, + any.monad-par ==0.3.5, + monad-par -chaselev -newgeneric, + any.monad-par-extras ==0.3.3, + any.monadLib ==3.10.1, + any.mtl ==2.2.2, + any.mwc-random ==0.15.0.2, + any.nats ==1.1.2, + nats +binary +hashable +template-haskell, + any.network ==3.1.2.7, + network -devel, + any.network-byte-order ==0.1.6, + any.network-info ==0.2.1, + any.newtype-generics ==0.6.1, + any.numtype-dk ==0.5.0.3, + any.old-locale ==1.0.0.7, + any.old-time ==1.1.0.3, + any.optparse-applicative ==0.16.1.0, + optparse-applicative +process, + any.panic ==0.4.0.1, + any.parallel ==3.2.2.0, + any.parameterized-utils ==2.1.5.0, + parameterized-utils +unsafe-operations, + any.parsec ==3.1.15.0, + any.parser-combinators ==1.3.0, + parser-combinators -dev, + any.pem ==0.2.4, + any.pretty ==1.1.3.6, + any.prettyprinter ==1.7.1, + prettyprinter -buildreadme +text, + any.primitive ==0.7.3.0, + any.process ==1.6.13.2, + any.profunctors ==5.6.2, + any.psqueues ==0.2.7.3, + any.quickcheck-instances ==0.3.27, + quickcheck-instances -bytestring-builder, + any.random ==1.2.1, + any.reflection ==2.1.6, + reflection -slow +template-haskell, + any.regex-base ==0.94.0.2, + any.regex-compat ==0.95.2.1, + any.regex-posix ==0.96.0.1, + regex-posix -_regex-posix-clib, + any.resourcet ==1.2.4.3, + any.rts ==1.0.2, + any.safe ==0.3.19, + any.sbv ==9.0, + any.scientific ==0.3.7.0, + scientific -bytestring-builder -integer-simple, + any.scotty ==0.12, + any.semialign ==1.2.0.1, + semialign +semigroupoids, + any.semigroupoids ==5.3.7, + semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers, + any.semigroups ==0.20, + semigroups +binary +bytestring -bytestring-builder +containers +deepseq +hashable +tagged +template-haskell +text +transformers +unordered-containers, + any.semirings ==0.6, + semirings +containers +unordered-containers, + any.silently ==1.2.5.2, + any.simple-get-opt ==0.4, + any.simple-sendfile ==0.2.30, + simple-sendfile +allow-bsd, + any.simple-smt ==0.9.7, + any.splitmix ==0.1.0.4, + splitmix -optimised-mixer, + any.statistics ==0.16.0.2, + any.stm ==2.5.0.2, + any.streaming-commons ==0.2.2.4, + streaming-commons -use-bytestring-builder, + any.strict ==0.4.0.1, + strict +assoc, + any.syb ==0.7.2.1, + any.tagged ==0.8.6.1, + tagged +deepseq +transformers, + any.tasty ==1.4.2.1, + tasty +clock +unix, + any.tasty-hunit ==0.10.0.3, + any.tasty-quickcheck ==0.10.2, + any.template-haskell ==2.18.0.0, + any.temporary ==1.3, + any.terminfo ==0.4.1.5, + any.test-framework ==0.8.2.0, + any.test-framework-hunit ==0.3.0.2, + test-framework-hunit -base3 +base4, + any.test-lib ==0.4, + any.text ==1.2.5.0, + any.text-short ==0.1.5, + text-short -asserts, + any.tf-random ==0.5, + any.th-abstraction ==0.4.3.0, + any.th-lift ==0.8.2, + any.th-lift-instances ==0.1.19, + any.these ==1.1.1.1, + these +assoc, + any.time ==1.11.1.1, + any.time-compat ==1.9.6.1, + time-compat -old-locale, + any.time-manager ==0.0.0, + any.tls ==1.5.7, + tls +compat -hans +network, + any.tls-session-manager ==0.0.4, + any.transformers ==0.5.6.2, + any.transformers-base ==0.4.6, + transformers-base +orphaninstances, + any.transformers-compat ==0.7.1, + transformers-compat -five +five-three -four +generic-deriving +mtl -three -two, + any.type-equality ==1, + any.unbounded-delays ==0.1.1.1, + any.uniplate ==1.6.13, + any.unix ==2.7.2.2, + any.unix-compat ==0.5.4, + unix-compat -old-time, + any.unix-time ==0.4.7, + any.unliftio ==0.2.22.0, + any.unliftio-core ==0.2.0.1, + any.unordered-containers ==0.2.19.1, + unordered-containers -debug, + any.utf8-string ==1.0.2, + any.uuid ==1.3.15, + any.uuid-types ==1.0.5, + any.vault ==0.3.1.5, + vault +useghc, + any.vector ==0.12.3.1, + vector +boundschecks -internalchecks -unsafechecks -wall, + any.vector-algorithms ==0.8.0.4, + vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks, + any.vector-binary-instances ==0.2.5.2, + any.vector-th-unbox ==0.2.2, + any.versions ==5.0.3, + any.void ==0.7.3, + void -safe, + any.wai ==3.2.3, + any.wai-extra ==3.1.10, + wai-extra -build-example, + any.wai-logger ==2.4.0, + any.warp ==3.3.20, + warp +allow-sendfilefd -network-bytestring -warp-debug +x509, + any.warp-tls ==3.3.2, + any.wcwidth ==0.0.2, + wcwidth -cli +split-base, + any.what4 ==1.3, + what4 -drealtestdisable -solvertests -stptestdisable, + any.witherable ==0.4.2, + any.word8 ==0.1.3, + any.x509 ==1.7.6, + any.x509-store ==1.6.9, + any.x509-validation ==1.6.12, + any.xml ==1.3.14, + any.zenc ==0.1.2, + any.zlib ==0.6.3.0, + zlib -bundled-c-zlib -non-blocking-ffi -pkg-config, + any.zlib-bindings ==0.1.1.5 +index-state: hackage.haskell.org 2022-05-04T18:13:54Z