diff --git a/.github/workflows/haskell.yml b/.github/workflows/haskell.yml index 59cbce51..d9494403 100644 --- a/.github/workflows/haskell.yml +++ b/.github/workflows/haskell.yml @@ -32,9 +32,9 @@ jobs: - name: Install LLVM (macOS) if: runner.os == 'macOS' run: | - brew install llvm@13 - echo "LLVM_CONFIG=$(brew --prefix llvm@13)/bin/llvm-config" >> $GITHUB_ENV - echo "$(brew --prefix llvm@13)/bin" >> $GITHUB_PATH + brew install llvm@14 + echo "LLVM_CONFIG=$(brew --prefix llvm@14)/bin/llvm-config" >> $GITHUB_ENV + echo "$(brew --prefix llvm@14)/bin" >> $GITHUB_PATH - name: Verify LLVM installation if: runner.os == 'macOS' diff --git a/io-classes-mtl/CHANGELOG.md b/io-classes-mtl/CHANGELOG.md index 1403f92e..290aa4a7 100644 --- a/io-classes-mtl/CHANGELOG.md +++ b/io-classes-mtl/CHANGELOG.md @@ -1,5 +1,12 @@ # Revision history for io-classes-mtl +## 0.1.2.1 + +### Non breaking changes + +* Added `newArray` to `MArray ContTSTM` instance (all GHC versions `9.10` were + affected). + ## 0.1.2.0 ### Non breaking changes diff --git a/io-classes-mtl/io-classes-mtl.cabal b/io-classes-mtl/io-classes-mtl.cabal index 357c8660..a160fd37 100644 --- a/io-classes-mtl/io-classes-mtl.cabal +++ b/io-classes-mtl/io-classes-mtl.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: io-classes-mtl -version: 0.1.2.0 +version: 0.1.2.1 synopsis: Experimental MTL instances for io-classes description: MTL instances for diff --git a/io-classes-mtl/src/Control/Monad/Class/MonadSTM/Trans.hs b/io-classes-mtl/src/Control/Monad/Class/MonadSTM/Trans.hs index a66e47d8..4bc9fd5b 100644 --- a/io-classes-mtl/src/Control/Monad/Class/MonadSTM/Trans.hs +++ b/io-classes-mtl/src/Control/Monad/Class/MonadSTM/Trans.hs @@ -52,9 +52,7 @@ instance ( MonadSTM m, MArray e a (STM m) ) => MArray e a (ContTSTM r m) where getNumElements = ContTSTM . getNumElements unsafeRead arr = ContTSTM . unsafeRead arr unsafeWrite arr i = ContTSTM . unsafeWrite arr i -#if __GLASGOW_HASKELL__ >= 910 newArray idxs = ContTSTM . newArray idxs -#endif -- note: this (and the following) instance requires 'UndecidableInstances' diff --git a/io-sim/test/Test/Control/Monad/IOSimPOR.hs b/io-sim/test/Test/Control/Monad/IOSimPOR.hs index 74c44d0e..b4d85f01 100644 --- a/io-sim/test/Test/Control/Monad/IOSimPOR.hs +++ b/io-sim/test/Test/Control/Monad/IOSimPOR.hs @@ -434,15 +434,31 @@ doit n = do threadDelay 1 readTVarIO r - -traceNoDuplicates :: (Testable prop1, Show a1) => ((a1 -> a2 -> a2) -> prop1) -> Property -traceNoDuplicates k = r `pseq` (k addTrace .&&. maximum (traceCounts ()) == 1) +traceNoDuplicates :: forall a b. + (Show a) + => ((a -> b -> b) -> Property) + -> Property +-- this NOINLINE pragma is useful for debugging if `r` didn't flow outside of +-- `traceNoDuplicate`. +{-# NOINLINE traceNoDuplicates #-} +traceNoDuplicates k = unsafePerformIO $ do + r <- newIORef (Map.empty :: Map String Int) + return $ r `pseq` + (k (addTrace r) .&&. counterexample "trace counts" (maximum (Map.elems (traceCounts r)) === 1)) where - r = unsafePerformIO $ newIORef (Map.empty :: Map String Int) - addTrace t x = unsafePerformIO $ do - atomicModifyIORef r (\m->(Map.insertWith (+) (show t) 1 m,())) + addTrace :: IORef (Map String Int) -> a -> b -> b + addTrace r t x = unsafePerformIO $ do + let s = show t + atomicModifyIORef r + (\m-> + let m' = Map.insertWith (+) s 1 m + in (m', ()) + ) return x - traceCounts () = unsafePerformIO $ Map.elems <$> readIORef r + + traceCounts :: IORef (Map String Int) -> Map String Int + traceCounts r = unsafePerformIO $ readIORef r + -- | Checks that IOSimPOR is capable of analysing an infinite simulation -- lazily. diff --git a/si-timers/si-timers.cabal b/si-timers/si-timers.cabal index a8778af1..c0ffccf8 100644 --- a/si-timers/si-timers.cabal +++ b/si-timers/si-timers.cabal @@ -8,7 +8,7 @@ description: license: Apache-2.0 license-files: LICENSE NOTICE copyright: 2022-2024 Input Output Global Inc (IOG) -author: Duncan Coutts, Neil Davis, Marcin Szamotulski +author: Duncan Coutts, Neil Davies, Marcin Szamotulski maintainer: Duncan Coutts duncan@well-typed.com, Marcin Szamotulski coot@coot.me category: Time build-type: Simple