ref-mtl 0.2 → 0.3
raw patch · 3 files changed
+38/−16 lines, 3 filesdep +transformersdep ~mtldep ~stm
Dependencies added: transformers
Dependency ranges changed: mtl, stm
Files
- Control/Monad/Ref.hs +30/−10
- LICENSE +1/−1
- ref-mtl.cabal +7/−5
Control/Monad/Ref.hs view
@@ -28,7 +28,7 @@ -------------------------------------------------------------------------------- -- | -- Module : Control.Monad.Ref--- Copyright : (c) Harvard University 2006-2010+-- Copyright : (c) Harvard University 2006-2011 -- License : BSD-style -- Maintainer : mainland@eecs.harvard.edu --@@ -53,15 +53,17 @@ readTVar, writeTVar) import Control.Monad.ST (ST)-import Control.Monad.Cont (ContT)-import Control.Monad.Error (ErrorT, Error)-import Control.Monad.List (ListT)-import Control.Monad.Reader (ReaderT)-import Control.Monad.State.Lazy as Lazy (StateT)-import Control.Monad.State.Strict as Strict (StateT)-import Control.Monad.Trans (lift)-import Control.Monad.Writer.Lazy as Lazy (WriterT)-import Control.Monad.Writer.Strict as Strict (WriterT)+import Control.Monad.Trans.Cont (ContT)+import Control.Monad.Trans.Error (ErrorT, Error)+import Control.Monad.Trans.Identity (IdentityT)+import Control.Monad.Trans.List (ListT)+import Control.Monad.Trans.Maybe (MaybeT)+import Control.Monad.Trans.Reader (ReaderT)+import Control.Monad.Trans.State.Lazy as Lazy (StateT)+import Control.Monad.Trans.State.Strict as Strict (StateT)+import Control.Monad.Trans.Writer.Lazy as Lazy (WriterT)+import Control.Monad.Trans.Writer.Strict as Strict (WriterT)+import Control.Monad.Trans.Class (lift) import Data.IORef (IORef, atomicModifyIORef, modifyIORef,@@ -123,12 +125,24 @@ writeRef r x = lift $ writeRef r x modifyRef r f = lift $ modifyRef r f +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+ 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 +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+ instance MonadRef r m => MonadRef r (ReaderT r' m) where newRef r = lift $ newRef r readRef r = lift $ readRef r@@ -174,7 +188,13 @@ instance (Error e, MonadAtomicRef r m) => MonadAtomicRef r (ErrorT e m) where atomicModifyRef r f = lift $ atomicModifyRef r f +instance MonadAtomicRef r m => MonadAtomicRef r (IdentityT m) where+ atomicModifyRef r f = lift $ atomicModifyRef r f+ instance MonadAtomicRef r m => MonadAtomicRef r (ListT m) where+ atomicModifyRef r f = lift $ atomicModifyRef r f++instance MonadAtomicRef r m => MonadAtomicRef r (MaybeT m) where atomicModifyRef r f = lift $ atomicModifyRef r f instance MonadAtomicRef r m => MonadAtomicRef r (ReaderT r' m) where
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2006-2010+Copyright (c) 2006-2011 The President and Fellows of Harvard College. Redistribution and use in source and binary forms, with or without
ref-mtl.cabal view
@@ -1,15 +1,16 @@ name: ref-mtl-version: 0.2+version: 0.3 cabal-version: >= 1.6 license: BSD3 license-file: LICENSE-copyright: (c) 2006-2010 Harvard University+copyright: (c) 2006-2011 Harvard University author: Geoffrey Mainland <mainland@eecs.harvard.edu> maintainer: mainland@eecs.harvard.edu stability: alpha homepage: http://www.eecs.harvard.edu/~mainland/ category: Control-synopsis: A type class for monads with references using type families.+synopsis: A type class for monads with references compatible with the mtl2+ library. description: Contains a 'MonadRef' type class that abstracts over the details of manipulating references, allowing one to write code that can operate in either the ST monad or the IO monad.@@ -22,8 +23,9 @@ build-depends: base >= 4 && < 5,- stm >= 2.1 && < 2.2,- mtl >= 1.1 && < 1.2+ stm >= 2.1 && < 2.3,+ transformers >= 0.2 && < 0.3,+ mtl >= 2.0 && < 2.1 source-repository head type: svn