packages feed

io-classes 1.3.1.0 → 1.4.0.0

raw patch · 25 files changed

+172/−118 lines, 25 filesdep ~base

Dependency ranges changed: base

Files

CHANGELOG.md view
@@ -1,10 +1,14 @@ # Revsion history of io-classes -## next release+## 1.4.0.0  ### Breaking changes +* Removed deprecated module `Control.Monad.Class.MonadVar`.+ ### Non-breaking changes++* Fixed some module haddock typos.  ## 1.3.1.0 
NOTICE view
@@ -1,4 +1,4 @@-Copyright 2019-2023 Input Output Global Inc (IOG)+Copyright 2019-2024 Input Output Global Inc (IOG)     Licensed under the Apache License, Version 2.0 (the "License");    you may not use this file except in compliance with the License.
README.md view
@@ -80,7 +80,38 @@ * [MonadST]: provides a way to lift `ST`-computations. * [MonadSay]: dummy debugging interface +## Differences from `base`, `async`, or `exceptions` packages +### Major differences++* `getMonotonicTime` returns `Time` (a newtype wrapper around `DiffTime`)+* `Deadlock` exceptions are not thrown to the main thread (see+  [ref][io-deadlock]), so they cannot be caught. This was a design decision,+  which allows to catch all deadlocks which otherwise could be captured by+  a `catch`.++### Minor differences++Some of the types have more general kind signatures, e.g.++```+type Async :: (Type -> Type) -> Type -> Type+```++The first type of kind `Type -> Type` describes the monad which could be+instantiated to `IO`, `IOSim` or some other monad stacks built with monad+transformers.  The same applies to many other types, e.g. `TVar`, `TMVar`.++The following types although similar to the originals are not the same as the+ones that come from `base`, `async`, or `exceptions` packages:++* `Handler` (origin: `base`)+* `MaskingState` (origin: `base`)+* `Concurrently` (origin: `async`)+* `ExceptionInLinkedThread` (origin: `async`): `io-class`es version does not+  store `Async`+* `ExitCase` (origin: `exceptions`)+ ## Debuging & Insepction  We provide quite extended debugging & inspection API.  This proved to be@@ -117,6 +148,7 @@ [contributing]: https://www.github.com/input-output-hk/io-sim/tree/master/CONTRIBUTING.md [`nothunks`]: https://hackage.haskell.org/package/nothunks [labelThread-base]: https://hackage.haskell.org/package/base-4.17.0.0/docs/GHC-Conc-Sync.html#v:labelThread+[io-deadlock]: https://hackage.haskell.org/package/base-4.19.0.0/docs/Control-Exception.html#t:Deadlock  [MonadEventlog]: https://hackage.haskell.org/package/io-sim-classes/docs/Control-Monad-Class-MonadEventlog.html#t:MonadEventlog [Debug.Trace]: https://hackage.haskell.org/package/base/docs/Debug-Trace.html
io-classes.cabal view
@@ -1,14 +1,18 @@ cabal-version:       3.0 name:                io-classes-version:             1.3.1.0+version:             1.4.0.0 synopsis:            Type classes for concurrency with STM, ST and timing description:   IO Monad class hierarchy compatible with-  [io-sim](https://hackage.haskell.org/package/io-sim), 'base', 'async',-  'stm', 'exceptions' & 'time' packages.+  [io-sim](https://hackage.haskell.org/package/io-sim),+  [base](https://hackage.haskell.org/package/base),+  [async](https://hackage.haskell.org/package/async),+  [stm](https://hackage.haskell.org/package/stm),+  [exceptions](https://hackage.haskell.org/package/exceptions) &+  [time](https://hackage.haskell.org/package/time) packages. license:             Apache-2.0 license-files:       LICENSE NOTICE-copyright:           2019-2023 Input Output Global Inc (IOG)+copyright:           2019-2024 Input Output Global Inc (IOG) author:              Alexander Vieth, Duncan Coutts, Marcin Szamotulski, Thomas Winant maintainer:          Duncan Coutts duncan@well-typed.com, Marcin Szamotulski coot@coot.me category:            Control@@ -56,7 +60,6 @@                        Control.Monad.Class.MonadAsync                        Control.Monad.Class.MonadEventlog                        Control.Monad.Class.MonadFork-                       Control.Monad.Class.MonadMVar                        Control.Monad.Class.MonadSay                        Control.Monad.Class.MonadST                        Control.Monad.Class.MonadSTM@@ -66,6 +69,7 @@                        Control.Monad.Class.MonadTimer                        Control.Monad.Class.MonadTest   default-language:    Haskell2010+  default-extensions:  ImportQualifiedPost   other-extensions:    CPP                        DataKinds                        DefaultSignatures
src/Control/Concurrent/Class/MonadMVar.hs view
@@ -8,13 +8,13 @@   , MonadInspectMVar (..)   ) where -import qualified Control.Concurrent.MVar as IO-import           Control.Monad.Class.MonadThrow+import Control.Concurrent.MVar qualified as IO+import Control.Monad.Class.MonadThrow -import           Control.Monad.Reader (ReaderT (..))-import           Control.Monad.Trans (lift)+import Control.Monad.Reader (ReaderT (..))+import Control.Monad.Trans (lift) -import           Data.Kind (Type)+import Data.Kind (Type)   class Monad m => MonadMVar m where
src/Control/Concurrent/Class/MonadSTM.hs view
@@ -4,11 +4,11 @@   (module STM)   where -import           Control.Monad.Class.MonadSTM              as STM-import           Control.Concurrent.Class.MonadSTM.TVar    as STM-import           Control.Concurrent.Class.MonadSTM.TMVar   as STM-import           Control.Concurrent.Class.MonadSTM.TChan   as STM-import           Control.Concurrent.Class.MonadSTM.TQueue  as STM-import           Control.Concurrent.Class.MonadSTM.TBQueue as STM-import           Control.Concurrent.Class.MonadSTM.TArray  as STM+import Control.Monad.Class.MonadSTM              as STM+import Control.Concurrent.Class.MonadSTM.TVar    as STM+import Control.Concurrent.Class.MonadSTM.TMVar   as STM+import Control.Concurrent.Class.MonadSTM.TChan   as STM+import Control.Concurrent.Class.MonadSTM.TQueue  as STM+import Control.Concurrent.Class.MonadSTM.TBQueue as STM+import Control.Concurrent.Class.MonadSTM.TArray  as STM 
src/Control/Concurrent/Class/MonadSTM/TArray.hs view
@@ -4,4 +4,4 @@ -- module Control.Concurrent.Class.MonadSTM.TArray (type TArray) where -import           Control.Monad.Class.MonadSTM.Internal+import Control.Monad.Class.MonadSTM.Internal
src/Control/Concurrent/Class/MonadSTM/TBQueue.hs view
@@ -25,4 +25,4 @@   , traceTBQueueIO   ) where -import           Control.Monad.Class.MonadSTM.Internal+import Control.Monad.Class.MonadSTM.Internal
src/Control/Concurrent/Class/MonadSTM/TChan.hs view
@@ -23,4 +23,4 @@   , isEmptyTChan   ) where -import           Control.Monad.Class.MonadSTM.Internal+import Control.Monad.Class.MonadSTM.Internal
src/Control/Concurrent/Class/MonadSTM/TMVar.hs view
@@ -25,4 +25,4 @@   , traceTMVarIO   ) where -import           Control.Monad.Class.MonadSTM.Internal+import Control.Monad.Class.MonadSTM.Internal
src/Control/Concurrent/Class/MonadSTM/TQueue.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE ExplicitNamespaces #-} --- | This module corresponds to `Control.Concurrnet.STM.TVar` in "stm" package+-- | This module corresponds to `Control.Concurrent.STM.TQueue` in "stm" package -- module Control.Concurrent.Class.MonadSTM.TQueue   ( -- * MonadSTM@@ -23,4 +23,4 @@   , traceTQueueIO   ) where -import           Control.Monad.Class.MonadSTM.Internal+import Control.Monad.Class.MonadSTM.Internal
src/Control/Concurrent/Class/MonadSTM/TSem.hs view
@@ -17,4 +17,4 @@   , traceTSemIO   ) where -import           Control.Monad.Class.MonadSTM.Internal+import Control.Monad.Class.MonadSTM.Internal
src/Control/Concurrent/Class/MonadSTM/TVar.hs view
@@ -23,4 +23,4 @@   , traceTVarIO   ) where -import           Control.Monad.Class.MonadSTM.Internal+import Control.Monad.Class.MonadSTM.Internal
src/Control/Monad/Class/MonadAsync.hs view
@@ -10,6 +10,10 @@ {-# LANGUAGE TypeFamilyDependencies #-} -- MonadAsync's ReaderT instance is undecidable. {-# LANGUAGE UndecidableInstances   #-}++-- | <https://hackage.haskell.org/package/async async> API compatible with both+-- 'IO' and <https://hackage.haskell.org/package/io-sim IOSim>.+-- module Control.Monad.Class.MonadAsync   ( MonadAsync (..)   , AsyncCancelled (..)@@ -27,30 +31,30 @@   , Concurrently (..)   ) where -import           Prelude hiding (read)+import Prelude hiding (read)  #if MIN_VERSION_base(4,18,0)-import           Control.Applicative (Alternative (..))+import Control.Applicative (Alternative (..)) #else-import           Control.Applicative (Alternative (..), liftA2)+import Control.Applicative (Alternative (..), liftA2) #endif-import           Control.Monad (forever)-import           Control.Monad.Class.MonadFork-import           Control.Monad.Class.MonadSTM-import           Control.Monad.Class.MonadThrow-import           Control.Monad.Class.MonadTimer+import Control.Monad (forever)+import Control.Monad.Class.MonadFork+import Control.Monad.Class.MonadSTM+import Control.Monad.Class.MonadThrow+import Control.Monad.Class.MonadTimer -import           Control.Monad.Reader (ReaderT (..))-import           Control.Monad.Trans (lift)+import Control.Monad.Reader (ReaderT (..))+import Control.Monad.Trans (lift) -import           Control.Concurrent.Async (AsyncCancelled (..))-import qualified Control.Concurrent.Async as Async-import qualified Control.Exception as E+import Control.Concurrent.Async (AsyncCancelled (..))+import Control.Concurrent.Async qualified as Async+import Control.Exception qualified as E -import           Data.Bifunctor (first)-import           Data.Foldable (fold)-import           Data.Functor (void)-import           Data.Kind (Type)+import Data.Bifunctor (first)+import Data.Foldable (fold)+import Data.Functor (void)+import Data.Kind (Type)  class ( MonadSTM m       , MonadThread m
src/Control/Monad/Class/MonadEventlog.hs view
@@ -1,10 +1,8 @@-module Control.Monad.Class.MonadEventlog-  ( MonadEventlog (..)-  ) where+module Control.Monad.Class.MonadEventlog (MonadEventlog (..)) where -import           Control.Monad.Reader+import Control.Monad.Reader -import qualified Debug.Trace as IO (traceEventIO, traceMarkerIO)+import Debug.Trace qualified as IO (traceEventIO, traceMarkerIO)  class Monad m => MonadEventlog m where 
src/Control/Monad/Class/MonadFork.hs view
@@ -3,17 +3,22 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies        #-} +-- | A generalisation of+-- <https://hackage.haskell.org/package/base/docs/Control-Concurrent.html Control.Concurrent>+-- API to both 'IO' and <https://hackage.haskell.org/package/io-sim IOSim>.+-- module Control.Monad.Class.MonadFork   ( MonadThread (..)   , labelThisThread   , MonadFork (..)   ) where -import qualified Control.Concurrent as IO-import           Control.Exception (AsyncException (ThreadKilled), Exception, SomeException)-import           Control.Monad.Reader (ReaderT (..), lift)-import           Data.Kind (Type)-import qualified GHC.Conc.Sync as IO (labelThread)+import Control.Concurrent qualified as IO+import Control.Exception (AsyncException (ThreadKilled), Exception,+           SomeException)+import Control.Monad.Reader (ReaderT (..), lift)+import Data.Kind (Type)+import GHC.Conc.Sync qualified as IO (labelThread)   class (Monad m, Eq   (ThreadId m),
− src/Control/Monad/Class/MonadMVar.hs
@@ -1,3 +0,0 @@-module Control.Monad.Class.MonadMVar {-# DEPRECATED "Use Control.Concurrent.Class.MonadMVar" #-} (module X) where--import Control.Concurrent.Class.MonadMVar as X
src/Control/Monad/Class/MonadST.hs view
@@ -1,9 +1,9 @@ {-# LANGUAGE RankNTypes #-} module Control.Monad.Class.MonadST (MonadST (..)) where -import           Control.Monad.Reader+import Control.Monad.Reader -import           Control.Monad.ST (ST, stToIO)+import Control.Monad.ST (ST, stToIO)   -- | This class is for abstracting over 'stToIO' which allows running 'ST'
src/Control/Monad/Class/MonadSTM.hs view
@@ -1,15 +1,15 @@ -- | 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 DerivingStrategies    #-}+{-# LANGUAGE FlexibleContexts      #-}+{-# LANGUAGE GADTs                 #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE RankNTypes            #-}+{-# LANGUAGE ScopedTypeVariables   #-} -- undecidable instances needed for 'WrappedSTM' instances of 'MonadThrow' and -- 'MonadCatch' type classes.-{-# LANGUAGE UndecidableInstances       #-}+{-# LANGUAGE UndecidableInstances  #-} module Control.Monad.Class.MonadSTM   ( MonadSTM (STM, atomically, retry, orElse, check)   , throwSTM@@ -22,7 +22,7 @@   , MonadInspectSTM (..)   ) where -import           Control.Monad.Class.MonadSTM.Internal+import Control.Monad.Class.MonadSTM.Internal  -- $non-standard-extensions --
src/Control/Monad/Class/MonadSTM/Internal.hs view
@@ -48,7 +48,7 @@   , isEmptyTMVarDefault   , labelTMVarDefault   , traceTMVarDefault-    -- ** Default 'TBQueue' implementation+    -- ** Default 'TQueue' implementation   , TQueueDefault (..)   , newTQueueDefault   , writeTQueueDefault@@ -99,35 +99,35 @@   , labelTChanDefault   ) where -import           Prelude hiding (read)+import Prelude hiding (read) -import qualified Control.Concurrent.STM.TArray as STM-import qualified Control.Concurrent.STM.TBQueue as STM-import qualified Control.Concurrent.STM.TChan as STM-import qualified Control.Concurrent.STM.TMVar as STM-import qualified Control.Concurrent.STM.TQueue as STM-import qualified Control.Concurrent.STM.TSem as STM-import qualified Control.Concurrent.STM.TVar as STM-import           Control.Monad (unless, when)-import qualified Control.Monad.STM as STM+import Control.Concurrent.STM.TArray qualified as STM+import Control.Concurrent.STM.TBQueue qualified as STM+import Control.Concurrent.STM.TChan qualified as STM+import Control.Concurrent.STM.TMVar qualified as STM+import Control.Concurrent.STM.TQueue qualified as STM+import Control.Concurrent.STM.TSem qualified as STM+import Control.Concurrent.STM.TVar qualified as STM+import Control.Monad (unless, when)+import Control.Monad.STM qualified as STM -import           Control.Monad.Reader (ReaderT (..))-import           Control.Monad.Trans (lift)+import Control.Monad.Reader (ReaderT (..))+import Control.Monad.Trans (lift) -import qualified Control.Monad.Class.MonadThrow as MonadThrow+import Control.Monad.Class.MonadThrow qualified as MonadThrow -import           Control.Exception-import           Data.Array (Array, bounds)-import qualified Data.Array as Array-import           Data.Array.Base (IArray (numElements), MArray (..),-                     arrEleBottom, listArray, unsafeAt)-import           Data.Foldable (traverse_)-import           Data.Ix (Ix, rangeSize)-import           Data.Kind (Type)-import           Data.Proxy (Proxy (..))-import           Data.Typeable (Typeable)-import           GHC.Stack-import           Numeric.Natural (Natural)+import Control.Exception+import Data.Array (Array, bounds)+import Data.Array qualified as Array+import Data.Array.Base (IArray (numElements), MArray (..), arrEleBottom,+           listArray, unsafeAt)+import Data.Foldable (traverse_)+import Data.Ix (Ix, rangeSize)+import Data.Kind (Type)+import Data.Proxy (Proxy (..))+import Data.Typeable (Typeable)+import GHC.Stack+import Numeric.Natural (Natural)   -- $default-implementations@@ -436,7 +436,7 @@   -- This is supported by 'IOSim' (and 'IOSimPOR'); 'IO' has a trivial instance.   --   -- The simplest example is:-  -- +  --   -- >   -- > traceTVar (Proxy @m) tvar (\_ -> TraceString . show)   -- >
src/Control/Monad/Class/MonadSay.hs view
@@ -1,7 +1,7 @@ module Control.Monad.Class.MonadSay where -import           Control.Monad.Reader-import qualified Data.ByteString.Char8 as BSC+import Control.Monad.Reader+import Data.ByteString.Char8 qualified as BSC  class Monad m => MonadSay m where   say :: String -> m ()
src/Control/Monad/Class/MonadTest.hs view
@@ -1,10 +1,10 @@ module Control.Monad.Class.MonadTest (MonadTest (..)) where -import           Control.Monad.Reader+import Control.Monad.Reader  -- | A helper monad for /IOSimPOR/. class Monad m => MonadTest m where-  -- | mark a thread for schedule exploration.  All threads that are forked by+  -- | Mark a thread for schedule exploration.  All threads that are forked by   -- it are also included in the exploration.   --   exploreRaces :: m ()
src/Control/Monad/Class/MonadThrow.hs view
@@ -7,6 +7,10 @@ {-# LANGUAGE TupleSections             #-} {-# LANGUAGE TypeFamilies              #-} +-- | A generalisation of+-- <https://hackage.haskell.org/package/base/docs/Control-Exception.html Control.Exception>+-- API to both 'IO' and <https://hackage.haskell.org/package/io-sim IOSim>.+-- module Control.Monad.Class.MonadThrow   ( MonadThrow (..)   , MonadCatch (..)@@ -21,14 +25,14 @@   , catches   ) where -import           Control.Exception (Exception (..), MaskingState, SomeException)-import qualified Control.Exception as IO-import           Control.Monad (liftM)+import Control.Exception (Exception (..), MaskingState, SomeException)+import Control.Exception qualified as IO+import Control.Monad (liftM) -import           Control.Monad.Reader (ReaderT (..), runReaderT, lift)+import Control.Monad.Reader (ReaderT (..), lift, runReaderT) -import           Control.Monad.STM (STM)-import qualified Control.Monad.STM as STM+import Control.Monad.STM (STM)+import Control.Monad.STM qualified as STM  -- | Throwing exceptions, and resource handling in the presence of exceptions. --
src/Control/Monad/Class/MonadTime.hs view
@@ -1,5 +1,9 @@ {-# LANGUAGE DeriveGeneric #-} +-- | <https://hackage.haskell.org/package/time time> and+-- <https://hackage.haskell.org/package/base base> time API compatible with both+-- 'IO' and <https://hackage.haskell.org/package/io-sim IOSim>.+-- module Control.Monad.Class.MonadTime   ( MonadTime (..)   , MonadMonotonicTimeNSec (..)@@ -10,13 +14,12 @@   , NominalDiffTime   ) where -import           Control.Monad.Reader+import Control.Monad.Reader -import           Data.Time.Clock (NominalDiffTime, UTCTime,-                     addUTCTime, diffUTCTime)-import qualified Data.Time.Clock as Time-import           Data.Word (Word64)-import qualified GHC.Clock as IO (getMonotonicTimeNSec)+import Data.Time.Clock (NominalDiffTime, UTCTime, addUTCTime, diffUTCTime)+import Data.Time.Clock qualified as Time+import Data.Word (Word64)+import GHC.Clock qualified as IO (getMonotonicTimeNSec)   class Monad m => MonadMonotonicTimeNSec m where
src/Control/Monad/Class/MonadTimer.hs view
@@ -4,20 +4,23 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies        #-} --- | Provides classes to handle delays and timeouts.+-- | Provides classes to handle delays and timeouts which generalised+-- <https://hackage.haskell.org/package/base base> API to both 'IO' and+-- <https://hackage.haskell.org/package/io-sim IOSim>.+-- module Control.Monad.Class.MonadTimer   ( MonadDelay (..)   , MonadTimer (..)   ) where -import qualified Control.Concurrent as IO-import           Control.Concurrent.Class.MonadSTM-import qualified Control.Concurrent.STM.TVar as STM+import Control.Concurrent qualified as IO+import Control.Concurrent.Class.MonadSTM+import Control.Concurrent.STM.TVar qualified as STM -import           Control.Monad.Reader (ReaderT (..))-import           Control.Monad.Trans (lift)+import Control.Monad.Reader (ReaderT (..))+import Control.Monad.Trans (lift) -import qualified System.Timeout as IO+import System.Timeout qualified as IO  -- | A typeclass to delay current thread. class Monad m => MonadDelay m where