packages feed

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 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 #-}