ref-tf (empty) → 0.1
raw patch · 4 files changed
+136/−0 lines, 4 filesdep +basesetup-changed
Dependencies added: base
Files
- Control/Monad/Ref.hs +83/−0
- LICENSE +26/−0
- Setup.hs +3/−0
- ref-tf.cabal +24/−0
+ Control/Monad/Ref.hs view
@@ -0,0 +1,83 @@+-- Copyright (c) 2006-2010+-- The President and Fellows of Harvard College.+--+-- Redistribution and use in source and binary forms, with or without+-- modification, are permitted provided that the following conditions+-- are met:+-- 1. Redistributions of source code must retain the above copyright+-- notice, this list of conditions and the following disclaimer.+-- 2. Redistributions in binary form must reproduce the above copyright+-- notice, this list of conditions and the following disclaimer in the+-- documentation and/or other materials provided with the distribution.+-- 3. Neither the name of the University nor the names of its contributors+-- may be used to endorse or promote products derived from this software+-- without specific prior written permission.+--+-- THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND+-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+-- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+-- ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE+-- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+-- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+-- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+-- SUCH DAMAGE.++--------------------------------------------------------------------------------+-- |+-- Module : Control.Monad.Ref+-- Copyright : (c) Harvard University 2006-2010+-- License : BSD-style+-- Maintainer : mainland@eecs.harvard.edu+--+-- Stability : experimental+-- Portability : non-portable (uses Control.Monad.ST)+--+-- Mutable references in the (strict) ST monad.+--+--------------------------------------------------------------------------------++{-# LANGUAGE TypeFamilies #-}++module Control.Monad.Ref (+ MonadRef(..)+ ) where++import Control.Monad.ST+import Data.IORef+import Data.STRef++-- |The 'MonadRef' type class abstracts over the details of manipulating+-- references, allowing one to write code that uses references and can operate+-- in either the ST monad or the IO monad.++class (Monad m) => MonadRef m where+ type Ref m :: * -> *++ -- |Create a new reference+ newRef :: a -> m (Ref m a)+ -- |Read the value of a reference+ readRef :: Ref m a -> m a+ -- |Write a new value to a reference+ writeRef :: Ref m a -> a -> m ()+ -- |Mutate the contents of a reference+ modifyRef :: Ref m a -> (a -> a) -> m ()+ modifyRef r f = readRef r >>= writeRef r . f++instance MonadRef (ST s) where+ type Ref (ST s) = STRef s++ newRef = newSTRef+ readRef = readSTRef+ writeRef = writeSTRef+ modifyRef = modifySTRef++instance MonadRef IO where+ type Ref IO = IORef++ newRef = newIORef+ readRef = readIORef+ writeRef = writeIORef+ modifyRef = modifyIORef
+ LICENSE view
@@ -0,0 +1,26 @@+Copyright (c) 2006-2010+ The President and Fellows of Harvard College.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions+are met:+1. Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.+2. Redistributions in binary form must reproduce the above copyright+ notice, this list of conditions and the following disclaimer in the+ documentation and/or other materials provided with the distribution.+3. Neither the name of the University nor the names of its contributors+ may be used to endorse or promote products derived from this software+ without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF+SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,3 @@+import Distribution.Simple++main = defaultMain
+ ref-tf.cabal view
@@ -0,0 +1,24 @@+name: ref-tf+version: 0.1+cabal-version: >= 1.2+license: BSD3+license-file: LICENSE+copyright: (c) 2006-2010 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.+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.++build-type: Simple++library+ exposed-modules:+ Control.Monad.Ref++ build-depends:+ base >= 4 && < 5