io-sim 1.0.0.0 → 1.0.0.1
raw patch · 8 files changed
+56/−17 lines, 8 filesdep −dequedep ~basePVP ok
version bump matches the API change (PVP)
Dependencies removed: deque
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- CHANGELOG.md +5/−1
- io-sim.cabal +5/−5
- src/Control/Monad/IOSim/Internal.hs +3/−6
- src/Control/Monad/IOSim/STM.hs +2/−2
- src/Control/Monad/IOSimPOR/Internal.hs +0/−1
- src/Data/Deque/Strict.hs +41/−0
- test/Test/Control/Monad/IOSimPOR.hs +0/−1
- test/Test/Control/Monad/Utils.hs +0/−1
CHANGELOG.md view
@@ -1,6 +1,10 @@ # Revsion history of io-sim -## next version+## 1.0.0.1++### Non breaking changes++* Support `ghc-9.6`. ## 1.0.0.0
io-sim.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: io-sim-version: 1.0.0.0+version: 1.0.0.1 synopsis: A pure simulator for monadic concurrency with STM. description: A pure simulator monad with support of concurency (base, async), stm,@@ -17,7 +17,7 @@ build-type: Simple extra-source-files: CHANGELOG.md README.md-tested-with: GHC == { 8.10, 9.2, 9.4 }+tested-with: GHC == { 8.10, 9.2, 9.4, 9.6 } flag asserts description: Enable assertions@@ -56,7 +56,8 @@ Control.Monad.IOSimPOR.Internal, Control.Monad.IOSimPOR.Types, Control.Monad.IOSimPOR.QuickCheckUtils,- Control.Monad.IOSimPOR.Timeout+ Control.Monad.IOSimPOR.Timeout,+ Data.Deque.Strict default-language: Haskell2010 other-extensions: BangPatterns, CPP,@@ -75,11 +76,10 @@ RankNTypes, ScopedTypeVariables, TypeFamilies- build-depends: base >=4.9 && <4.18,+ build-depends: base >=4.9 && <4.19, io-classes ^>=1.0, exceptions >=0.10, containers,- deque, nothunks, parallel, psqueues >=0.2 && <0.3,
src/Control/Monad/IOSim/Internal.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE BangPatterns #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE FlexibleInstances #-}@@ -56,10 +55,8 @@ import Data.Set (Set) import qualified Data.Set as Set import Data.Time (UTCTime (..), fromGregorian)-import Deque.Strict (Deque)-import qualified Deque.Strict as Deque--import GHC.Exts (fromList)+import Data.Deque.Strict (Deque)+import qualified Data.Deque.Strict as Deque import Control.Exception (NonTermination (..), assert, throw) import Control.Monad (join, when)@@ -829,7 +826,7 @@ -- To preserve our invariants (that threadBlocked is correct) -- we update the runqueue and threads together here (unblocked, simstate {- runqueue = runqueue <> fromList unblocked,+ runqueue = runqueue <> Deque.fromList unblocked, threads = threads' }) where
src/Control/Monad/IOSim/STM.hs view
@@ -21,8 +21,8 @@ import Numeric.Natural (Natural) -import Deque.Strict (Deque)-import qualified Deque.Strict as Deque+import Data.Deque.Strict (Deque)+import qualified Data.Deque.Strict as Deque -- -- Default TQueue implementation in terms of a 'TVar' (used by sim)
src/Control/Monad/IOSimPOR/Internal.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE BangPatterns #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE FlexibleContexts #-}
+ src/Data/Deque/Strict.hs view
@@ -0,0 +1,41 @@+{-# LANGUAGE LambdaCase #-}++-- | A minimal implementation of a strict deque.+--+module Data.Deque.Strict where++import Prelude hiding (head, init, tail)+import Data.Foldable (foldl', foldr')+import qualified Data.List as List++data Deque a = Deque ![a] ![a]++instance Semigroup (Deque a) where+ Deque as bs <> Deque as' bs' =+ Deque as (bs' ++ reverse as' ++ bs)++instance Monoid (Deque a) where+ mempty = Deque [] []++instance Foldable Deque where+ foldr step init (Deque head tail) =+ foldr step (foldl' (flip step) init tail) head+ foldl' step init (Deque head tail) =+ foldr' (flip step) (foldl' step init head) tail++fromList :: [a] -> Deque a+fromList as = Deque as []++snoc :: a -> Deque a -> Deque a+snoc a (Deque as bs) = Deque as (a : bs)++uncons :: Deque a -> Maybe (a, Deque a)+uncons = \case+ Deque (a : head') tail -> Just (a, Deque head' tail)+ Deque [] tail ->+ case reverse tail of+ (a : head') -> Just (a, Deque head' [])+ [] -> Nothing++filter :: (a -> Bool) -> Deque a -> Deque a+filter f (Deque head tail) = Deque (List.filter f head) (List.filter f tail)
test/Test/Control/Monad/IOSimPOR.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-}
test/Test/Control/Monad/Utils.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-}