packages feed

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 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