packages feed

rcu 0.2.2 → 0.2.3

raw patch · 6 files changed

+41/−11 lines, 6 filesdep +fail

Dependencies added: fail

Files

CHANGELOG.markdown view
@@ -1,16 +1,23 @@+## 0.2.3 [2018.08.01]+---------------------+* Add `MonadFail` instances for `ReadingRCU` and `WritingRCU`.+ ## 0.2.2 [2018.02.06] --------------------- * Include `HLint.hs` with the tarball distribution, fixing the `hlint`   test suite.  ## 0.2.1+-------- * Support `doctest-0.12`  ## 0.2+------ * Revamp `Setup.hs` to use `cabal-doctest`. This makes it build   with `Cabal-2.0`, and makes the `doctest`s work with `cabal new-build` and   sandboxes.  ## 0+---- * Initial version 
README.markdown view
@@ -2,7 +2,7 @@  [![Hackage](https://img.shields.io/hackage/v/rcu.svg)](https://hackage.haskell.org/package/rcu) [![Build Status](https://secure.travis-ci.org/ekmett/rcu.png?branch=master)](http://travis-ci.org/ekmett/rcu) -This package is an exploration of Read-Copy Update in Haskell based on [Relativistic Programming in Haskell](http://web.cecs.pdx.edu/~walpole/papers/haskell2015.pdf) by Cooper and Walpole.  It includes a sound QSBR-based implementation and an attempt at an STM-based implementation.+This package is an exploration of Read-Copy Update in Haskell based on [Relativistic Programming in Haskell](http://web.cecs.pdx.edu/~theod/papers/haskell2015.pdf) by Cooper and Walpole.  It includes a sound QSBR-based implementation and an attempt at an STM-based implementation.  In the spirit of [A Relativistic Enhancement to Software Transactional Memory](https://www.usenix.org/legacy/events/hotpar11/tech/final_files/Howard.pdf)  by Howard and Walpole, we could extend the STM implementation to allow reads and writes on the same data in parallel, writes to disjoint data in parallel, and force readers to agree that writes before a `synchronize` happened before writes after it.
rcu.cabal view
@@ -1,6 +1,6 @@ name:          rcu category:      Data-version:       0.2.2+version:       0.2.3 license:       BSD3 cabal-version: >= 1.22 license-file:  LICENSE@@ -11,7 +11,11 @@ bug-reports:   http://github.com/ekmett/rcu/issues copyright:     Copyright (C) 2015 Edward A. Kmett, Theodore Rhys Cooper build-type:    Custom-tested-with:   GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.1+tested-with:   GHC == 7.10.3+             , GHC == 8.0.2+             , GHC == 8.2.2+             , GHC == 8.4.3+             , GHC == 8.6.1 synopsis:      Read-Copy-Update for Haskell description:   Read-Copy-Update for Haskell. @@ -57,6 +61,7 @@   build-depends:     atomic-primops >= 0.8,     base >= 4.8 && < 5,+    fail == 4.9.*,     ghc-prim >= 0.3,     parallel >= 3.2 && < 3.3,     primitive >= 0.6,@@ -80,7 +85,7 @@    if flag(unstable)     hs-source-dirs: unstable-    build-depends: stm >= 2.4.4 && < 2.5+    build-depends: stm >= 2.4.4 && < 2.6     exposed-modules:       Control.Concurrent.RCU.STM       Control.Concurrent.RCU.STM.Internal@@ -463,7 +468,7 @@   else     build-depends:       base >= 4.8,-      doctest >= 0.11.1 && < 0.14,+      doctest >= 0.11.1 && < 0.17,       parallel,       rcu 
src/Control/Concurrent/RCU/GC/Internal.hs view
@@ -52,7 +52,7 @@ import Data.Primitive import Prelude hiding (Read(..)) import System.Mem-+import qualified Control.Monad.Fail as Fail  -------------------------------------------------------------------------------- -- * Shared References@@ -140,8 +140,11 @@   ReadingRCU m >>= f = ReadingRCU $ \ s -> do     a <- m s     runReadingRCU (f a) s-  fail s = ReadingRCU $ \ _ -> fail s+  fail = Fail.fail +instance Fail.MonadFail (ReadingRCU s) where+  fail s = ReadingRCU $ \ _ -> Fail.fail s+ instance Alternative (ReadingRCU s) where   empty = ReadingRCU $ \ _ -> empty   ReadingRCU ma <|> ReadingRCU mb = ReadingRCU $ \s -> ma s <|> mb s@@ -174,7 +177,10 @@   WritingRCU m >>= f = WritingRCU $ \ s -> do     a <- m s     runWritingRCU (f a) s-  fail s = WritingRCU $ \ _ -> fail s+  fail = Fail.fail++instance Fail.MonadFail (WritingRCU s) where+  fail s = WritingRCU $ \ _ -> Fail.fail s  instance Alternative (WritingRCU s) where   empty = WritingRCU $ \ _ -> empty
src/Control/Concurrent/RCU/QSBR/Internal.hs view
@@ -53,6 +53,7 @@ import Data.List import Data.Primitive import Foreign+import qualified Control.Monad.Fail as Fail  import Prelude hiding (Read(..)) @@ -149,8 +150,11 @@   ReadingRCU m >>= f = ReadingRCU $ \ s -> do     a <- m s     runReadingRCU (f a) s-  fail s = ReadingRCU $ \ _ -> fail s+  fail = Fail.fail +instance Fail.MonadFail (ReadingRCU s) where+  fail s = ReadingRCU $ \ _ -> Fail.fail s+ instance Alternative (ReadingRCU s) where   empty = ReadingRCU $ \ _ -> empty   ReadingRCU ma <|> ReadingRCU mb = ReadingRCU $ \s -> ma s <|> mb s@@ -183,7 +187,10 @@   WritingRCU m >>= f = WritingRCU $ \ s -> do     a <- m s     runWritingRCU (f a) s-  fail s = WritingRCU $ \ _ -> fail s+  fail = Fail.fail++instance Fail.MonadFail (WritingRCU s) where+  fail s = WritingRCU $ \ _ -> Fail.fail s  instance Alternative (WritingRCU s) where   empty = WritingRCU $ \ _ -> empty
unstable/Control/Concurrent/RCU/STM/Internal.hs view
@@ -38,6 +38,7 @@ import Data.Coerce import Data.Int import Prelude hiding (read, Read)+import qualified Control.Monad.Fail as Fail  -------------------------------------------------------------------------------- -- * Shared References@@ -52,7 +53,8 @@ --------------------------------------------------------------------------------  -- | This is the basic read-side critical section for an RCU computation-newtype ReadingRCU s a = ReadingRCU { runReadingRCU :: IO a } deriving (Functor, Applicative, Monad)+newtype ReadingRCU s a = ReadingRCU { runReadingRCU :: IO a }+  deriving (Functor, Applicative, Monad, Fail.MonadFail)  instance MonadNew (SRef s) (ReadingRCU s) where   newSRef = r where@@ -82,6 +84,9 @@   WritingRCU m >>= f = WritingRCU $ \ c -> do     a <- m c     runWritingRCU (f a) c+  fail = Fail.fail++instance Fail.MonadFail (WritingRCU s) where   fail s = WritingRCU $ \ _ -> fail s  instance Alternative (WritingRCU s) where