packages feed

ref-fd 0.3.0.3 → 0.3.0.4

raw patch · 4 files changed

+132/−74 lines, 4 filesdep ~transformerssetup-changedPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: transformers

API changes (from Hackage documentation)

+ Control.Monad.Ref: atomicModifyRef' :: MonadAtomicRef r m => r a -> (a -> (a, b)) -> m b
+ Control.Monad.Ref: modifyRef' :: MonadRef r m => r a -> (a -> a) -> m ()
- Control.Monad.Ref: class MonadRef r m => MonadAtomicRef r m | m -> r
+ Control.Monad.Ref: class MonadRef r m => MonadAtomicRef r m | m -> r where atomicModifyRef' r f = do { b <- atomicModifyRef r (\ x -> let (a, b) = f x in (a, a `seq` b)); b `seq` return b }
- Control.Monad.Ref: class Monad m => MonadRef r m | m -> r where modifyRef r f = readRef r >>= writeRef r . f
+ Control.Monad.Ref: class Monad m => MonadRef r m | m -> r where modifyRef r f = readRef r >>= writeRef r . f modifyRef' r f = readRef r >>= \ x -> let x' = f x in x' `seq` writeRef r x'

Files

Control/Monad/Ref.hs view
@@ -1,20 +1,20 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE UndecidableInstances #-}+{-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}+ -- | -- Module      :  Control.Monad.Ref -- Copyright   :  (c) Harvard University 2006-2011---                (c) Geoffrey Mainland 2011-2012+--                (c) Geoffrey Mainland 2011-2014 -- License     :  BSD-style--- Maintainer  :  mainland@eecs.harvard.edu+-- Maintainer  :  Geoffrey Mainland <mainland@cs.drexel.edu> -- -- Stability   :  experimental -- Portability :  non-portable------------------------------------------------------------------------------------ -{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE UndecidableInstances #-}- module Control.Monad.Ref (     MonadRef(..),     MonadAtomicRef(..)@@ -28,6 +28,9 @@ import Control.Monad.ST (ST) import Control.Monad.Trans.Cont (ContT) import Control.Monad.Trans.Error (ErrorT, Error)+#if MIN_VERSION_transformers(0,4,0)+import Control.Monad.Trans.Except (ExceptT)+#endif /* MIN_VERSION_transformers(0,4,0) */ import Control.Monad.Trans.Identity (IdentityT) import Control.Monad.Trans.List (ListT) import Control.Monad.Trans.Maybe (MaybeT)@@ -38,6 +41,10 @@ import Control.Monad.Trans.Writer.Strict as Strict (WriterT) import Control.Monad.Trans.Class (lift) import Data.IORef (IORef,+#if MIN_VERSION_base(4,6,0)+                   atomicModifyIORef',+                   modifyIORef',+#endif /* MIN_VERSION_base(4,6,0) */                    atomicModifyIORef,                    modifyIORef,                    newIORef,@@ -45,6 +52,9 @@                    writeIORef) import Data.Monoid (Monoid) import Data.STRef (STRef,+#if MIN_VERSION_base(4,6,0)+                   modifySTRef',+#endif /* MIN_VERSION_base(4,6,0) */                    modifySTRef,                    newSTRef,                    readSTRef,@@ -64,22 +74,39 @@     -- |Mutate the contents of a reference     modifyRef :: r a -> (a -> a) -> m ()     modifyRef r f = readRef r >>= writeRef r . f+    -- |Strict version of 'modifyRef'+    modifyRef' :: r a -> (a -> a) -> m ()+    modifyRef' r f = readRef r >>= \x -> let x' = f x in x' `seq` writeRef r x'  class (MonadRef r m) => MonadAtomicRef r m | m -> r where     -- |Atomically mutate the contents of a reference     atomicModifyRef :: r a -> (a -> (a, b)) -> m b+    -- |Strict version of atomicModifyRef. This forces both the value stored in+    -- the reference as well as the value returned.+    atomicModifyRef' :: r a -> (a -> (a, b)) -> m b+    atomicModifyRef' r f = do+        b <- atomicModifyRef r+                (\x -> let (a, b) = f x+                        in (a, a `seq` b))+        b `seq` return b  instance MonadRef (STRef s) (ST s) where-    newRef    = newSTRef-    readRef   = readSTRef-    writeRef  = writeSTRef-    modifyRef = modifySTRef+    newRef     = newSTRef+    readRef    = readSTRef+    writeRef   = writeSTRef+    modifyRef  = modifySTRef+#if MIN_VERSION_base(4,6,0)+    modifyRef' = modifySTRef'+#endif /* MIN_VERSION_base(4,6,0) */  instance MonadRef IORef IO where-    newRef    = newIORef-    readRef   = readIORef-    writeRef  = writeIORef-    modifyRef = modifyIORef+    newRef     = newIORef+    readRef    = readIORef+    writeRef   = writeIORef+    modifyRef  = modifyIORef+#if MIN_VERSION_base(4,6,0)+    modifyRef' = modifyIORef'+#endif /* MIN_VERSION_base(4,6,0) */  instance MonadRef TVar STM where     newRef    = newTVar@@ -87,67 +114,89 @@     writeRef  = writeTVar  instance MonadRef r m => MonadRef r (ContT r' m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f  instance (Error e, MonadRef r m) => MonadRef r (ErrorT e m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f +#if MIN_VERSION_transformers(0,4,0)+instance (MonadRef r m) => MonadRef r (ExceptT e m) where+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f+#endif /* MIN_VERSION_transformers(0,4,0) */+ instance MonadRef r m => MonadRef r (IdentityT m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f  instance MonadRef r m => MonadRef r (ListT m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f  instance MonadRef r m => MonadRef r (MaybeT m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f  instance MonadRef r m => MonadRef r (ReaderT r' m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f  instance MonadRef r m => MonadRef r (Lazy.StateT s m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f  instance MonadRef r m => MonadRef r (Strict.StateT s m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f  instance (Monoid w, MonadRef r m) => MonadRef r (Lazy.WriterT w m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f  instance (Monoid w, MonadRef r m) => MonadRef r (Strict.WriterT w m) where-    newRef    r   = lift $ newRef    r-    readRef   r   = lift $ readRef   r-    writeRef  r x = lift $ writeRef  r x-    modifyRef r f = lift $ modifyRef r f+    newRef     r   = lift $ newRef     r+    readRef    r   = lift $ readRef    r+    writeRef   r x = lift $ writeRef   r x+    modifyRef  r f = lift $ modifyRef  r f+    modifyRef' r f = lift $ modifyRef' r f  instance MonadAtomicRef IORef IO where     atomicModifyRef = atomicModifyIORef+#if MIN_VERSION_base(4,6,0)+    atomicModifyRef' = atomicModifyIORef'+#endif /* MIN_VERSION_base(4,6,0) */  instance MonadAtomicRef TVar STM where     atomicModifyRef r f = do x <- readRef r@@ -156,31 +205,41 @@                              return y  instance MonadAtomicRef r m => MonadAtomicRef r (ContT r' m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f  instance (Error e, MonadAtomicRef r m) => MonadAtomicRef r (ErrorT e m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f  instance MonadAtomicRef r m => MonadAtomicRef r (IdentityT m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f  instance MonadAtomicRef r m => MonadAtomicRef r (ListT m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f  instance MonadAtomicRef r m => MonadAtomicRef r (MaybeT m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f  instance MonadAtomicRef r m => MonadAtomicRef r (ReaderT r' m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f  instance MonadAtomicRef r m => MonadAtomicRef r (Lazy.StateT s m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f  instance MonadAtomicRef r m => MonadAtomicRef r (Strict.StateT s m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f  instance (Monoid w, MonadAtomicRef r m) => MonadAtomicRef r (Lazy.WriterT w m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f  instance (Monoid w, MonadAtomicRef r m) => MonadAtomicRef r (Strict.WriterT w m) where-    atomicModifyRef r f = lift $ atomicModifyRef r f+    atomicModifyRef  r f = lift $ atomicModifyRef  r f+    atomicModifyRef' r f = lift $ atomicModifyRef' r f
LICENSE view
@@ -25,7 +25,7 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -Copyright (c) 2011-2012, Geoffrey Mainland+Copyright (c) 2011-2014, Geoffrey Mainland All rights reserved.  Redistribution and use in source and binary forms, with or without modification,
Setup.hs view
@@ -1,3 +1,2 @@ import Distribution.Simple- main = defaultMain
ref-fd.cabal view
@@ -1,14 +1,14 @@ name:           ref-fd-version:        0.3.0.3+version:        0.3.0.4 cabal-version:  >= 1.6 license:        BSD3 license-file:   LICENSE copyright:      (c) 2006-2011 Harvard University-		(c) 2011-2012 Geoffrey Mainland-author:         Geoffrey Mainland <mainland@eecs.harvard.edu>+		(c) 2011-2014 Geoffrey Mainland+author:         Geoffrey Mainland <mainland@cs.drexel.edu> maintainer:     mainland@eecs.harvard.edu stability:      alpha-homepage:       http://www.eecs.harvard.edu/~mainland/+homepage:       http://www.cs.drexel.edu/~mainland/ category:       Control synopsis:       A type class for monads with references using functional                 dependencies.@@ -25,7 +25,7 @@   build-depends:     base         >= 4   && < 5,     stm          >= 2.1 && < 2.5,-    transformers >= 0.2 && < 0.4+    transformers >= 0.2 && < 0.5  source-repository head   type:     git