diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml index 34ae75bf..a541e04d 100644 --- a/.github/workflows/haskell.yml +++ b/.github/workflows/haskell.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - ghc: ["8.10", "9.2", "9.4", "9.6", "9.8", "9.10", "9.12"] + ghc: ["9.6.6", "9.8", "9.10", "9.12"] os: [ubuntu-latest, macos-latest, windows-latest] defaults: @@ -27,7 +27,7 @@ jobs: id: setup-haskell with: ghc-version: ${{ matrix.ghc }} - cabal-version: "3.12.1.0" + cabal-version: "3.14.2.0" - name: Install LLVM (macOS) if: runner.os == 'macOS' && matrix.ghc == '8.10' diff --git a/cabal.project b/cabal.project index 6c63f484..f950bdb7 100644 --- a/cabal.project +++ b/cabal.project @@ -12,7 +12,7 @@ package io-classes package strict-stm flags: +asserts -if impl (ghc >= 9.12) +if impl (ghc >= 9.10.2) allow-newer: -- Stuck on `cabal-3.14` issues and recalcitrant maintainers -- https://github.com/haskell/aeson/issues/1124 diff --git a/io-classes/CHANGELOG.md b/io-classes/CHANGELOG.md index 0a87196c..ea6e6c03 100644 --- a/io-classes/CHANGELOG.md +++ b/io-classes/CHANGELOG.md @@ -1,13 +1,11 @@ # Revsion history of io-classes -### next version - -* Support ghc-9.12 +### 1.8.0.0 ### Breaking changes -- Provided `MonadTraceMVar` -- Renamed `InspectMonad` to `InspectMonadSTM` +* Provided `MonadTraceMVar` +* Renamed `InspectMonad` to `InspectMonadSTM` * Added `threadLabel` to `MonadThread` * Added `MonadLabelledMVar` class. * Added `labelMVar` to `Control.Concurrent.Class.MonadMVar.Strict` @@ -21,6 +19,7 @@ * Added monad transformer instances for `MonadInspectSTM` & `MonadTraceSTM` type classes. +* Support ghc-9.12 ### 1.7.0.0 diff --git a/io-classes/io-classes.cabal b/io-classes/io-classes.cabal index 41a26940..0eaa21e7 100644 --- a/io-classes/io-classes.cabal +++ b/io-classes/io-classes.cabal @@ -1,6 +1,6 @@ cabal-version: 3.4 name: io-classes -version: 1.7.0.0 +version: 1.8.0.0 synopsis: Type classes for concurrency with STM, ST and timing description: IO Monad class hierarchy compatible with: @@ -38,7 +38,7 @@ category: Control build-type: Simple extra-doc-files: CHANGELOG.md README.md strict-stm/README.md strict-mvar/README.md bug-reports: https://github.com/input-output-hk/io-sim/issues -tested-with: GHC == { 8.10, 9.2, 9.4, 9.6, 9.8, 9.10 } +tested-with: GHC == { 9.6, 9.8, 9.10, 9.12 } source-repository head type: git @@ -87,38 +87,15 @@ library Control.Monad.Class.MonadTime Control.Monad.Class.MonadTimer Control.Monad.Class.MonadTest - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - other-extensions: CPP - DataKinds - DefaultSignatures - DeriveFunctor - DeriveGeneric - DerivingStrategies - ExistentialQuantification - ExplicitNamespaces - FlexibleContexts - FlexibleInstances - FunctionalDependencies - GADTs - GeneralisedNewtypeDeriving - MultiParamTypeClasses - NamedFieldPuns - QuantifiedConstraints - RankNTypes - ScopedTypeVariables - StandaloneDeriving - TypeFamilies - TypeFamilyDependencies - TypeOperators - UndecidableInstances + default-language: GHC2021 + default-extensions: LambdaCase build-depends: base >=4.9 && <4.22, array, - async >=2.1, + async >=2.1 && <2.3, bytestring, mtl >=2.2 && <2.4, primitive >= 0.7 && <0.11, - stm >=2.5 && <2.5.2 || >=2.5.3 && <2.6, + stm >=2.5 && <2.5.2 || ^>=2.5.3, time >=1.9.1 && <1.13 if impl(ghc >= 9.10) build-depends: ghc-internal @@ -127,6 +104,7 @@ library ghc-options: -fno-ignore-asserts library strict-stm + import: warnings visibility: public hs-source-dirs: strict-stm @@ -138,40 +116,26 @@ library strict-stm Control.Concurrent.Class.MonadSTM.Strict.TQueue Control.Concurrent.Class.MonadSTM.Strict.TVar reexported-modules: Control.Concurrent.Class.MonadSTM.TSem as Control.Concurrent.Class.MonadSTM.Strict.TSem - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - build-depends: base >= 4.9 && <4.22, + default-language: GHC2021 + default-extensions: LambdaCase + build-depends: base, array, - stm >= 2.5 && <2.6, io-classes:io-classes, - ghc-options: -Wall - -Wno-unticked-promoted-constructors - -Wcompat - -Wincomplete-uni-patterns - -Wincomplete-record-updates - -Wpartial-fields - -Widentities if flag(asserts) ghc-options: -fno-ignore-asserts library strict-mvar + import: warnings visibility: public hs-source-dirs: strict-mvar/src exposed-modules: Control.Concurrent.Class.MonadMVar.Strict - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - build-depends: base >= 4.9 && <4.22, + default-language: GHC2021 + default-extensions: LambdaCase + build-depends: base, io-classes:io-classes, - ghc-options: -Wall - -Wno-unticked-promoted-constructors - -Wcompat - -Wincomplete-uni-patterns - -Wincomplete-record-updates - -Wpartial-fields - -Widentities library si-timers import: warnings @@ -180,22 +144,14 @@ library si-timers exposed-modules: Control.Monad.Class.MonadTime.SI Control.Monad.Class.MonadTimer.SI other-modules: Control.Monad.Class.MonadTimer.NonStandard - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - other-extensions: BangPatterns, - CPP, - ConstraintKinds, - DefaultSignatures, - DeriveGeneric, - NumericUnderscores, - ScopedTypeVariables, - TypeFamilies - build-depends: base >=4.9 && <4.22, + default-language: GHC2021 + default-extensions: LambdaCase + build-depends: base, deepseq, mtl, nothunks, stm, - time >=1.9.1 && <1.13, + time, io-classes:io-classes if flag(asserts) @@ -214,24 +170,24 @@ library mtl , Control.Monad.Class.MonadTime.SI.Trans , Control.Monad.Class.MonadTimer.Trans , Control.Monad.Class.MonadTimer.SI.Trans - build-depends: base >=4.9 && <4.22, + build-depends: base, array, mtl, io-classes:{io-classes,si-timers} hs-source-dirs: mtl - default-language: Haskell2010 - default-extensions: ImportQualifiedPost + default-language: GHC2021 + default-extensions: LambdaCase library testlib import: warnings visibility: public hs-source-dirs: test exposed-modules: Test.Control.Concurrent.Class.MonadMVar.Strict.WHNF - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - build-depends: base >=4.9 && <4.22, + default-language: GHC2021 + default-extensions: LambdaCase + build-depends: base, nothunks, QuickCheck, io-classes:strict-mvar @@ -239,27 +195,18 @@ library testlib ghc-options: -fno-ignore-asserts test-suite test-strict-mvar + import: warnings type: exitcode-stdio-1.0 hs-source-dirs: strict-mvar/test main-is: Main.hs - - default-language: Haskell2010 - default-extensions: ImportQualifiedPost + default-language: GHC2021 + default-extensions: LambdaCase build-depends: base, QuickCheck, tasty, tasty-quickcheck, io-classes:testlib - ghc-options: -Wall - -Wno-unticked-promoted-constructors - -Wcompat - -Wincomplete-uni-patterns - -Wincomplete-record-updates - -Wpartial-fields - -Widentities - -fno-ignore-asserts - -- Since `io-sim` depends on `si-times` (`io-sim` depends on `Time`) some tests of -- are in `io-sim:test`: this is a good enough reason to pull `io-sim:test` -- into a seprate package. @@ -269,8 +216,8 @@ test-suite test-si-timers hs-source-dirs: si-timers/test main-is: Main.hs other-modules: Test.MonadTimer - default-language: Haskell2010 - default-extensions: ImportQualifiedPost + default-language: GHC2021 + default-extensions: LambdaCase build-depends: base, QuickCheck, diff --git a/io-classes/mtl/Control/Monad/Class/MonadSTM/Trans.hs b/io-classes/mtl/Control/Monad/Class/MonadSTM/Trans.hs index f1c2443a..965fd780 100644 --- a/io-classes/mtl/Control/Monad/Class/MonadSTM/Trans.hs +++ b/io-classes/mtl/Control/Monad/Class/MonadSTM/Trans.hs @@ -1,18 +1,10 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE KindSignatures #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE StandaloneDeriving #-} -{-# LANGUAGE TypeApplications #-} -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE CPP #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE TypeFamilies #-} -- undecidable instances needed for 'ContTSTM' instances of -- 'MonadThrow' and 'MonadCatch' type classes. -{-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-orphans #-} module Control.Monad.Class.MonadSTM.Trans (ContTSTM (..)) where diff --git a/io-classes/mtl/Control/Monad/Class/MonadThrow/Trans.hs b/io-classes/mtl/Control/Monad/Class/MonadThrow/Trans.hs index 4752e2ee..b6fda11e 100644 --- a/io-classes/mtl/Control/Monad/Class/MonadThrow/Trans.hs +++ b/io-classes/mtl/Control/Monad/Class/MonadThrow/Trans.hs @@ -1,5 +1,4 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -Wno-orphans #-} module Control.Monad.Class.MonadThrow.Trans () where diff --git a/io-classes/si-timers/src/Control/Monad/Class/MonadTime/SI.hs b/io-classes/si-timers/src/Control/Monad/Class/MonadTime/SI.hs index 292afd1f..a547e536 100644 --- a/io-classes/si-timers/src/Control/Monad/Class/MonadTime/SI.hs +++ b/io-classes/si-timers/src/Control/Monad/Class/MonadTime/SI.hs @@ -1,9 +1,6 @@ -{-# LANGUAGE DefaultSignatures #-} -{-# LANGUAGE DeriveAnyClass #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingStrategies #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE NumericUnderscores #-} +{-# LANGUAGE DefaultSignatures #-} +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE DerivingStrategies #-} module Control.Monad.Class.MonadTime.SI ( MonadTime (..) diff --git a/io-classes/si-timers/src/Control/Monad/Class/MonadTimer/SI.hs b/io-classes/si-timers/src/Control/Monad/Class/MonadTimer/SI.hs index 2a607a85..2e253233 100644 --- a/io-classes/si-timers/src/Control/Monad/Class/MonadTimer/SI.hs +++ b/io-classes/si-timers/src/Control/Monad/Class/MonadTimer/SI.hs @@ -1,9 +1,3 @@ -{-# LANGUAGE ConstraintKinds #-} -{-# LANGUAGE InstanceSigs #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE NumericUnderscores #-} -{-# LANGUAGE ScopedTypeVariables #-} - module Control.Monad.Class.MonadTimer.SI ( -- * Type classes MonadDelay (..) diff --git a/io-classes/src/Control/Concurrent/Class/MonadMVar.hs b/io-classes/src/Control/Concurrent/Class/MonadMVar.hs index f70c2eb2..b209c593 100644 --- a/io-classes/src/Control/Concurrent/Class/MonadMVar.hs +++ b/io-classes/src/Control/Concurrent/Class/MonadMVar.hs @@ -1,6 +1,4 @@ {-# LANGUAGE DefaultSignatures #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE QuantifiedConstraints #-} {-# LANGUAGE TypeFamilyDependencies #-} module Control.Concurrent.Class.MonadMVar diff --git a/io-classes/src/Control/Monad/Class/MonadAsync.hs b/io-classes/src/Control/Monad/Class/MonadAsync.hs index 8e0be9c9..c809c8ae 100644 --- a/io-classes/src/Control/Monad/Class/MonadAsync.hs +++ b/io-classes/src/Control/Monad/Class/MonadAsync.hs @@ -1,12 +1,7 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DefaultSignatures #-} -{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE QuantifiedConstraints #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilyDependencies #-} -- MonadAsync's ReaderT instance is undecidable. {-# LANGUAGE UndecidableInstances #-} diff --git a/io-classes/src/Control/Monad/Class/MonadFork.hs b/io-classes/src/Control/Monad/Class/MonadFork.hs index 4a4b77e7..88a07c8a 100644 --- a/io-classes/src/Control/Monad/Class/MonadFork.hs +++ b/io-classes/src/Control/Monad/Class/MonadFork.hs @@ -1,8 +1,5 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE CPP #-} +{-# LANGUAGE TypeFamilies #-} -- | A generalisation of -- diff --git a/io-classes/src/Control/Monad/Class/MonadST.hs b/io-classes/src/Control/Monad/Class/MonadST.hs index 21c4b53c..a3c37301 100644 --- a/io-classes/src/Control/Monad/Class/MonadST.hs +++ b/io-classes/src/Control/Monad/Class/MonadST.hs @@ -1,6 +1,3 @@ -{-# LANGUAGE InstanceSigs #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} module Control.Monad.Class.MonadST (MonadST (..)) where import Control.Monad.Reader diff --git a/io-classes/src/Control/Monad/Class/MonadSTM.hs b/io-classes/src/Control/Monad/Class/MonadSTM.hs index d5a0bcee..f5b4e734 100644 --- a/io-classes/src/Control/Monad/Class/MonadSTM.hs +++ b/io-classes/src/Control/Monad/Class/MonadSTM.hs @@ -1,15 +1,11 @@ --- | This module corresponds to "Control.Monad.STM" in "stm" package --- -{-# LANGUAGE DataKinds #-} -{-# LANGUAGE DerivingStrategies #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE GADTs #-} -- undecidable instances needed for 'WrappedSTM' instances of 'MonadThrow' and -- 'MonadCatch' type classes. -{-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE UndecidableInstances #-} + +-- | This module corresponds to "Control.Monad.STM" in "stm" package +-- module Control.Monad.Class.MonadSTM ( MonadSTM (STM, atomically, retry, orElse, check) , throwSTM diff --git a/io-classes/src/Control/Monad/Class/MonadSTM/Internal.hs b/io-classes/src/Control/Monad/Class/MonadSTM/Internal.hs index def1c490..48a6a3c4 100644 --- a/io-classes/src/Control/Monad/Class/MonadSTM/Internal.hs +++ b/io-classes/src/Control/Monad/Class/MonadSTM/Internal.hs @@ -1,23 +1,12 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE DataKinds #-} -{-# LANGUAGE DefaultSignatures #-} -{-# LANGUAGE DerivingStrategies #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE PatternSynonyms #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE StandaloneDeriving #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeFamilyDependencies #-} -{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE CPP #-} +{-# LANGUAGE DefaultSignatures #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE PatternSynonyms #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeFamilyDependencies #-} -- needed for `ReaderT` instance -{-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE UndecidableInstances #-} -- Internal module. It's only exposed as it provides various default types for -- defining new instances, otherwise prefer to use diff --git a/io-classes/src/Control/Monad/Class/MonadThrow.hs b/io-classes/src/Control/Monad/Class/MonadThrow.hs index d007908b..e649a5e8 100644 --- a/io-classes/src/Control/Monad/Class/MonadThrow.hs +++ b/io-classes/src/Control/Monad/Class/MonadThrow.hs @@ -1,12 +1,6 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE DefaultSignatures #-} -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE ExistentialQuantification #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE StandaloneDeriving #-} -{-# LANGUAGE TupleSections #-} -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE CPP #-} +{-# LANGUAGE DefaultSignatures #-} +{-# LANGUAGE TypeFamilies #-} -- | A generalisation of -- diff --git a/io-classes/src/Control/Monad/Class/MonadTime.hs b/io-classes/src/Control/Monad/Class/MonadTime.hs index dc6b33be..f2328eda 100644 --- a/io-classes/src/Control/Monad/Class/MonadTime.hs +++ b/io-classes/src/Control/Monad/Class/MonadTime.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE DeriveGeneric #-} - -- | and -- time API compatible with both -- 'IO' and . diff --git a/io-classes/src/Control/Monad/Class/MonadTimer.hs b/io-classes/src/Control/Monad/Class/MonadTimer.hs index c51f08bd..ea185375 100644 --- a/io-classes/src/Control/Monad/Class/MonadTimer.hs +++ b/io-classes/src/Control/Monad/Class/MonadTimer.hs @@ -1,8 +1,5 @@ -{-# LANGUAGE DefaultSignatures #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DefaultSignatures #-} +{-# LANGUAGE TypeFamilies #-} -- | Provides classes to handle delays and timeouts which generalised -- API to both 'IO' and diff --git a/io-classes/strict-mvar/src/Control/Concurrent/Class/MonadMVar/Strict.hs b/io-classes/strict-mvar/src/Control/Concurrent/Class/MonadMVar/Strict.hs index 1078a378..86b8146f 100644 --- a/io-classes/strict-mvar/src/Control/Concurrent/Class/MonadMVar/Strict.hs +++ b/io-classes/strict-mvar/src/Control/Concurrent/Class/MonadMVar/Strict.hs @@ -1,7 +1,3 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeOperators #-} - -- | This module corresponds to "Control.Concurrent.MVar" in the @base@ package. module Control.Concurrent.Class.MonadMVar.Strict ( -- * StrictMVar diff --git a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TArray.hs b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TArray.hs index b23d3db9..4a5d846b 100644 --- a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TArray.hs +++ b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TArray.hs @@ -1,10 +1,5 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE ExplicitNamespaces #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE UndecidableInstances #-} -- | This module corresponds to `Control.Concurrent.STM.TArray` in "stm" package -- diff --git a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TBQueue.hs b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TBQueue.hs index 80cde64d..98e7de66 100644 --- a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TBQueue.hs +++ b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TBQueue.hs @@ -1,8 +1,3 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE ExplicitNamespaces #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE TypeOperators #-} - -- | This module corresponds to `Control.Concurrent.STM.TBQueue` in "stm" package -- module Control.Concurrent.Class.MonadSTM.Strict.TBQueue diff --git a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TChan.hs b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TChan.hs index 9de61b11..b74a0ead 100644 --- a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TChan.hs +++ b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TChan.hs @@ -1,9 +1,3 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE ExplicitNamespaces #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE TypeOperators #-} - -- | This module corresponds to `Control.Concurrent.STM.TChan` in "stm" package -- module Control.Concurrent.Class.MonadSTM.Strict.TChan diff --git a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TMVar.hs b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TMVar.hs index 3ae1de09..2f43901e 100644 --- a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TMVar.hs +++ b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TMVar.hs @@ -1,8 +1,3 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE ExplicitNamespaces #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE TypeOperators #-} - -- | This module corresponds to `Control.Concurrent.STM.TMVar` in "stm" package -- module Control.Concurrent.Class.MonadSTM.Strict.TMVar diff --git a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TQueue.hs b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TQueue.hs index 37498a1b..40ced1f9 100644 --- a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TQueue.hs +++ b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TQueue.hs @@ -1,9 +1,3 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE ExplicitNamespaces #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE TypeOperators #-} - -- | This module corresponds to `Control.Concurrent.STM.TQueue` in "stm" package -- module Control.Concurrent.Class.MonadSTM.Strict.TQueue diff --git a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TVar.hs b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TVar.hs index 44028d8c..e77bf610 100644 --- a/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TVar.hs +++ b/io-classes/strict-stm/Control/Concurrent/Class/MonadSTM/Strict/TVar.hs @@ -1,8 +1,3 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeOperators #-} - -- | This module corresponds to `Control.Concurrent.STM.TVar` in "stm" package -- module Control.Concurrent.Class.MonadSTM.Strict.TVar diff --git a/io-sim/CHANGELOG.md b/io-sim/CHANGELOG.md index dd35598d..4f97f4b4 100644 --- a/io-sim/CHANGELOG.md +++ b/io-sim/CHANGELOG.md @@ -1,6 +1,12 @@ # Revision history of io-sim -## next version +## next release + +### Breaking changes + +### Non-breaking changes + +## 1.8.0.0 - Provided `MonadTraceMVar` - Renamed `InspectMonad` to `InspectMonadSTM` diff --git a/io-sim/bench/Main.hs b/io-sim/bench/Main.hs index fd3b98c7..b59152d7 100644 --- a/io-sim/bench/Main.hs +++ b/io-sim/bench/Main.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE ScopedTypeVariables #-} - module Main (main) where import Control.Concurrent.Class.MonadSTM diff --git a/io-sim/io-sim.cabal b/io-sim/io-sim.cabal index b663330f..dcfbe198 100644 --- a/io-sim/io-sim.cabal +++ b/io-sim/io-sim.cabal @@ -1,6 +1,6 @@ cabal-version: 3.4 name: io-sim -version: 1.6.0.0 +version: 1.8.0.0 synopsis: A pure simulator for monadic concurrency with STM. description: A pure simulator monad with support of concurrency (base & async style), stm, @@ -19,7 +19,7 @@ category: Testing build-type: Simple extra-doc-files: CHANGELOG.md README.md bug-reports: https://github.com/input-output-hk/io-sim/issues -tested-with: GHC == { 8.10, 9.2, 9.4, 9.6, 9.8, 9.10 } +tested-with: GHC == { 9.6, 9.8, 9.10, 9.12 } flag asserts description: Enable assertions @@ -60,28 +60,11 @@ library Control.Monad.IOSimPOR.QuickCheckUtils, Control.Monad.IOSimPOR.Timeout, Data.Deque.Strict - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - other-extensions: BangPatterns, - CPP, - DeriveFunctor, - DeriveGeneric, - DerivingVia, - ExistentialQuantification, - ExplicitNamespaces, - FlexibleContexts, - FlexibleInstances, - GADTSyntax, - GeneralizedNewtypeDeriving, - MultiParamTypeClasses, - NamedFieldPuns, - NumericUnderscores, - RankNTypes, - ScopedTypeVariables, - TypeFamilies + default-language: GHC2021 + default-extensions: LambdaCase build-depends: base >=4.9 && <4.22, io-classes:{io-classes,strict-stm,si-timers} - ^>=1.6 || ^>= 1.7, + ^>=1.6 || ^>= 1.7 || ^>= 1.8, exceptions >=0.10, containers, deepseq, @@ -109,8 +92,8 @@ test-suite test Test.Control.Monad.Utils Test.Control.Monad.IOSim Test.Control.Monad.IOSimPOR - default-language: Haskell2010 - default-extensions: ImportQualifiedPost + default-language: GHC2021 + default-extensions: LambdaCase build-depends: base, array, containers, @@ -131,8 +114,8 @@ benchmark bench type: exitcode-stdio-1.0 hs-source-dirs: bench main-is: Main.hs - default-language: Haskell2010 - default-extensions: ImportQualifiedPost + default-language: GHC2021 + default-extensions: LambdaCase build-depends: base, criterion ^>= 1.6, diff --git a/io-sim/src/Control/Monad/IOSim.hs b/io-sim/src/Control/Monad/IOSim.hs index cdb15672..ee6e8e66 100644 --- a/io-sim/src/Control/Monad/IOSim.hs +++ b/io-sim/src/Control/Monad/IOSim.hs @@ -1,11 +1,7 @@ {-# LANGUAGE ExplicitNamespaces #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TupleSections #-} +{-# LANGUAGE QuantifiedConstraints #-} {-# OPTIONS_GHC -Wno-name-shadowing #-} -{-# LANGUAGE QuantifiedConstraints #-} module Control.Monad.IOSim ( -- * Simulation monad IOSim diff --git a/io-sim/src/Control/Monad/IOSim/CommonTypes.hs b/io-sim/src/Control/Monad/IOSim/CommonTypes.hs index 81d97123..2d1758aa 100644 --- a/io-sim/src/Control/Monad/IOSim/CommonTypes.hs +++ b/io-sim/src/Control/Monad/IOSim/CommonTypes.hs @@ -1,11 +1,6 @@ -{-# LANGUAGE DeriveAnyClass #-} -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingStrategies #-} -{-# LANGUAGE DerivingVia #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE DerivingStrategies #-} +{-# LANGUAGE DerivingVia #-} -- | Common types shared between `IOSim` and `IOSimPOR`. -- diff --git a/io-sim/src/Control/Monad/IOSim/Internal.hs b/io-sim/src/Control/Monad/IOSim/Internal.hs index 76c0dd04..7037e0aa 100644 --- a/io-sim/src/Control/Monad/IOSim/Internal.hs +++ b/io-sim/src/Control/Monad/IOSim/Internal.hs @@ -1,15 +1,6 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} -{-# LANGUAGE DerivingVia #-} -{-# LANGUAGE ExistentialQuantification #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE GADTSyntax #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE CPP #-} +{-# LANGUAGE DerivingVia #-} +{-# LANGUAGE TypeFamilies #-} -- incomplete uni patterns in 'schedule' (when interpreting 'StmTxCommitted') -- and 'reschedule'. diff --git a/io-sim/src/Control/Monad/IOSim/InternalTypes.hs b/io-sim/src/Control/Monad/IOSim/InternalTypes.hs index 02d37de3..787c36db 100644 --- a/io-sim/src/Control/Monad/IOSim/InternalTypes.hs +++ b/io-sim/src/Control/Monad/IOSim/InternalTypes.hs @@ -1,6 +1,4 @@ -{-# LANGUAGE GADTs #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE GADTs #-} -- | Internal types shared between `IOSim` and `IOSimPOR`. -- diff --git a/io-sim/src/Control/Monad/IOSim/STM.hs b/io-sim/src/Control/Monad/IOSim/STM.hs index e13d7428..6c088b5c 100644 --- a/io-sim/src/Control/Monad/IOSim/STM.hs +++ b/io-sim/src/Control/Monad/IOSim/STM.hs @@ -1,7 +1,4 @@ -{-# LANGUAGE BangPatterns #-} {-# LANGUAGE QuantifiedConstraints #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeOperators #-} -- | 'io-sim' implementation of 'TQueue', 'TBQueue' and 'MVar'. -- diff --git a/io-sim/src/Control/Monad/IOSim/Types.hs b/io-sim/src/Control/Monad/IOSim/Types.hs index 47e1fede..c1a7e447 100644 --- a/io-sim/src/Control/Monad/IOSim/Types.hs +++ b/io-sim/src/Control/Monad/IOSim/Types.hs @@ -1,19 +1,7 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE DerivingVia #-} -{-# LANGUAGE ExistentialQuantification #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE GADTSyntax #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE NumericUnderscores #-} -{-# LANGUAGE PatternSynonyms #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE CPP #-} +{-# LANGUAGE DerivingVia #-} +{-# LANGUAGE PatternSynonyms #-} +{-# LANGUAGE TypeFamilies #-} -- Needed for `SimEvent` type. {-# OPTIONS_GHC -Wno-partial-fields #-} @@ -616,14 +604,24 @@ instance MonadInspectMVar (IOSim s) where MVarFull x _ -> pure (Just x) instance MonadTraceMVar (IOSim s) where - traceMVarIO _ (MVar mvar) f = traceTVarIO mvar traceMVarAsTVar + traceMVarIO :: forall proxy a. + proxy + -> MVar (IOSim s) a + -> ( Maybe (Maybe a) + -> Maybe a + -> ST s TraceValue + ) + -> IOSim s () + traceMVarIO _ (MVar mvar) f = traceTVarIO mvar f' where - traceMVarAsTVar Nothing (MVarEmpty _ _) = f Nothing Nothing - traceMVarAsTVar Nothing (MVarFull a _) = f Nothing (Just a) - traceMVarAsTVar (Just (MVarEmpty _ _)) (MVarEmpty _ _) = f (Just Nothing) Nothing - traceMVarAsTVar (Just (MVarEmpty _ _)) (MVarFull a _) = f (Just Nothing) (Just a) - traceMVarAsTVar (Just (MVarFull a _)) (MVarEmpty _ _) = f (Just (Just a)) Nothing - traceMVarAsTVar (Just (MVarFull a _)) (MVarFull a' _) = f (Just (Just a)) (Just a') + f' :: Maybe (MVarState m a) + -> MVarState m a + -> ST s TraceValue + f' mst st = f (g <$> mst) (g st) + + g :: MVarState m a -> Maybe a + g MVarEmpty{} = Nothing + g (MVarFull a _) = Just a instance MonadLabelledMVar (IOSim s) where labelMVar = labelMVarDefault diff --git a/io-sim/src/Control/Monad/IOSimPOR/Internal.hs b/io-sim/src/Control/Monad/IOSimPOR/Internal.hs index 3bc63cb4..92a7b3e7 100644 --- a/io-sim/src/Control/Monad/IOSimPOR/Internal.hs +++ b/io-sim/src/Control/Monad/IOSimPOR/Internal.hs @@ -1,17 +1,8 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE CPP #-} -{-# LANGUAGE DerivingVia #-} -{-# LANGUAGE ExistentialQuantification #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE GADTSyntax #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE CPP #-} +{-# LANGUAGE DerivingVia #-} -- only used to construct records if its clear to do so -{-# LANGUAGE RecordWildCards #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TypeFamilies #-} -- incomplete uni patterns in 'schedule' (when interpreting 'StmTxCommitted') -- and 'reschedule'. diff --git a/io-sim/src/Control/Monad/IOSimPOR/QuickCheckUtils.hs b/io-sim/src/Control/Monad/IOSimPOR/QuickCheckUtils.hs index 7737a832..efc3a95d 100644 --- a/io-sim/src/Control/Monad/IOSimPOR/QuickCheckUtils.hs +++ b/io-sim/src/Control/Monad/IOSimPOR/QuickCheckUtils.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE BangPatterns #-} - {-# OPTIONS_GHC -Wno-name-shadowing #-} module Control.Monad.IOSimPOR.QuickCheckUtils where diff --git a/io-sim/src/Control/Monad/IOSimPOR/Types.hs b/io-sim/src/Control/Monad/IOSimPOR/Types.hs index af5a82c8..16385aa1 100644 --- a/io-sim/src/Control/Monad/IOSimPOR/Types.hs +++ b/io-sim/src/Control/Monad/IOSimPOR/Types.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE NamedFieldPuns #-} module Control.Monad.IOSimPOR.Types ( -- * Effects Effect (..) diff --git a/io-sim/src/Data/Deque/Strict.hs b/io-sim/src/Data/Deque/Strict.hs index 069e273f..26251bf1 100644 --- a/io-sim/src/Data/Deque/Strict.hs +++ b/io-sim/src/Data/Deque/Strict.hs @@ -1,6 +1,4 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE LambdaCase #-} - +{-# LANGUAGE CPP #-} -- | A minimal implementation of a strict deque. -- module Data.Deque.Strict where diff --git a/io-sim/src/Data/List/Trace.hs b/io-sim/src/Data/List/Trace.hs index 752268c9..a9a4ea5e 100644 --- a/io-sim/src/Data/List/Trace.hs +++ b/io-sim/src/Data/List/Trace.hs @@ -1,5 +1,4 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveFunctor #-} +{-# LANGUAGE CPP #-} module Data.List.Trace ( Trace (..) diff --git a/io-sim/test/Test/Control/Concurrent/Class/MonadMVar.hs b/io-sim/test/Test/Control/Concurrent/Class/MonadMVar.hs index a9049b97..6a0a00f8 100644 --- a/io-sim/test/Test/Control/Concurrent/Class/MonadMVar.hs +++ b/io-sim/test/Test/Control/Concurrent/Class/MonadMVar.hs @@ -1,7 +1,4 @@ -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TupleSections #-} +{-# LANGUAGE GADTs #-} module Test.Control.Concurrent.Class.MonadMVar where diff --git a/io-sim/test/Test/Control/Monad/IOSim.hs b/io-sim/test/Test/Control/Monad/IOSim.hs index 0c944c1d..cb3fc106 100644 --- a/io-sim/test/Test/Control/Monad/IOSim.hs +++ b/io-sim/test/Test/Control/Monad/IOSim.hs @@ -1,10 +1,4 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE ConstraintKinds #-} -{-# LANGUAGE DeriveFunctor #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE NumericUnderscores #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE CPP #-} {-# OPTIONS_GHC -Wno-orphans #-} diff --git a/io-sim/test/Test/Control/Monad/IOSimPOR.hs b/io-sim/test/Test/Control/Monad/IOSimPOR.hs index b4d85f01..5ec4dde0 100644 --- a/io-sim/test/Test/Control/Monad/IOSimPOR.hs +++ b/io-sim/test/Test/Control/Monad/IOSimPOR.hs @@ -1,10 +1,5 @@ -{-# LANGUAGE CPP #-} -{-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE PartialTypeSignatures #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE CPP #-} +{-# LANGUAGE DeriveGeneric #-} {-# OPTIONS_GHC -Wno-unused-top-binds #-} {-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} diff --git a/io-sim/test/Test/Control/Monad/STM.hs b/io-sim/test/Test/Control/Monad/STM.hs index d80a3f6c..c7d49122 100644 --- a/io-sim/test/Test/Control/Monad/STM.hs +++ b/io-sim/test/Test/Control/Monad/STM.hs @@ -1,14 +1,7 @@ -{-# LANGUAGE BangPatterns #-} -{-# LANGUAGE DataKinds #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE NamedFieldPuns #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE StandaloneDeriving #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -Wno-unticked-promoted-constructors #-} diff --git a/io-sim/test/Test/Control/Monad/Utils.hs b/io-sim/test/Test/Control/Monad/Utils.hs index dc987a0c..72f98aa0 100644 --- a/io-sim/test/Test/Control/Monad/Utils.hs +++ b/io-sim/test/Test/Control/Monad/Utils.hs @@ -1,7 +1,3 @@ -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} - module Test.Control.Monad.Utils where import Data.Array