diff --git a/Control/Monad/Ref.hs b/Control/Monad/Ref.hs
new file mode 100644
--- /dev/null
+++ b/Control/Monad/Ref.hs
@@ -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
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -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.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,3 @@
+import Distribution.Simple
+
+main = defaultMain
diff --git a/ref-tf.cabal b/ref-tf.cabal
new file mode 100644
--- /dev/null
+++ b/ref-tf.cabal
@@ -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
