diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,12 +1,15 @@
+0.3.1.0
+
+- Added functions with MonadResource contraints.
+
 0.3.0.0
-=======
+
 - Implemented the improvements suggested by Michael Thompson here :
 https://groups.google.com/forum/#!topic/haskell-pipes/7n6NPTmxPKY by M.T.
 - Removed the newtypes. I mistakenly believed that they were needed to avoid
 having to enable -XImpredicativeTypes.
 
 0.2.0.0
-=======
 
 - Eversible, not Evertible!
 - Removed special purpose error functions.
diff --git a/src/Streaming/Eversion.hs b/src/Streaming/Eversion.hs
--- a/src/Streaming/Eversion.hs
+++ b/src/Streaming/Eversion.hs
@@ -5,7 +5,7 @@
 {-| Most pull-to-push transformations in this module require functions that are 
     polymorphic over a monad transformer.  
     
-    Because of this, some of the type signatures look internals, but actually many
+    Because of this, some of the type signatures look scary, but actually many
     (suitably polymorphic) operations on 'Stream's will unify with them.
    
     To get "interruptible" operations that can exit early with an error, put a
@@ -24,10 +24,13 @@
     ,   evertM_
     ,   evertMIO
     ,   evertMIO_
+    ,   evertMR
+    ,   evertMR_
         -- * Stream transformations 
     ,   transvert
     ,   transvertM
     ,   transvertMIO
+    ,   transvertMR
         -- * Internals
 --    ,   Feed(..)
     ,   generalEvertM
@@ -36,7 +39,7 @@
 
 import           Prelude 
 import           Control.Foldl (Fold(..),FoldM(..),generalize,simplify)
-import           Streaming (Stream,Of(..),Sum(..),inspect,unseparate)
+import           Streaming (Stream,Of(..),Sum(..),inspect,unseparate,MonadResource)
 import           Streaming.Internal
 import           Control.Monad.IO.Class
 import           Control.Monad.Trans.Class
@@ -47,7 +50,7 @@
 >>> import           Control.Monad.Trans.Identity
 >>> import           Control.Foldl (Fold(..),FoldM(..))
 >>> import qualified Control.Foldl as L
->>> import           Streaming (Stream,Of(..))
+>>> import           Streaming (Stream,Of(..),MonadResource,runResourceT)
 >>> import           Streaming.Prelude (yield,next,for)
 >>> import qualified Streaming.Prelude as S
 -}
@@ -116,6 +119,20 @@
           -> FoldM m a () -- ^
 evertMIO_ phi = evertMIO (fmap (fmap ((:>) ())) phi)
 
+evertMR :: MonadResource m => (forall t r. (MonadTrans t, MonadResource (t m)) => Stream (Of a) (t m) r -> t m (Of x r)) 
+       -> FoldM m a x -- ^
+evertMR phi = generalEvertM phi
+
+{-| 
+ 
+>>> runResourceT (L.foldM (evertMR_ (S.writeFile "/dev/null")) ["aaa","bbb"]) 
+
+-}
+evertMR_ :: MonadResource m => (forall t r. (MonadTrans t, MonadResource (t m)) => Stream (Of a) (t m) r -> t m r) 
+        -> FoldM m a () -- ^
+evertMR_ phi = evertMR (fmap (fmap ((:>) ())) phi)
+
+
 generalEvertM :: (Monad m) 
               => (forall r. Stream (Of a) (Stream ((->) (Feed a)) m) r -> Stream ((->) (Feed a)) m (Of b r))
               -> FoldM m a b -- ^
@@ -152,6 +169,12 @@
              -> FoldM m b x -- ^
              -> FoldM m a x
 transvertMIO phi = generalTransvertM phi
+
+transvertMR  :: MonadResource m 
+            => (forall t r. (MonadTrans t, MonadResource (t m)) => Stream (Of a) (t m) r -> Stream (Of b) (t m) r)
+            -> FoldM m b x -- ^
+            -> FoldM m a x
+transvertMR phi = generalTransvertM phi
 
 data Pair a b = Pair !a !b
 
diff --git a/src/Streaming/Eversion/Pipes.hs b/src/Streaming/Eversion/Pipes.hs
--- a/src/Streaming/Eversion/Pipes.hs
+++ b/src/Streaming/Eversion/Pipes.hs
@@ -10,10 +10,13 @@
     ,   evertM_
     ,   evertMIO
     ,   evertMIO_
+--    ,   evertMR
+--    ,   evertMR_
         -- * Producer transformations 
     ,   transvert
     ,   transvertM
     ,   transvertMIO
+--    ,   transvertMR
         -- * Examples
         -- $examples
     ) where
@@ -21,7 +24,7 @@
 import           Control.Monad.IO.Class
 import           Control.Monad.Trans.Class
 
-import           Streaming(Of(..))
+import           Streaming(MonadResource,strictly)
 import qualified Streaming.Prelude
 import qualified Streaming.Eversion
 import           Pipes
@@ -49,11 +52,11 @@
 
 evert :: (forall m r. Monad m => Producer a m r -> m (x,r)) 
       -> Fold a x -- ^
-evert phi = Streaming.Eversion.evert (\stream -> fmap (\(x,r) -> x :> r) (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))
+evert phi = Streaming.Eversion.evert (\stream -> fmap strictly (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))
 
 evertM :: Monad m => (forall t r. (MonadTrans t, Monad (t m)) => Producer a (t m) r -> t m (x,r)) 
        -> FoldM m a x -- ^
-evertM phi = Streaming.Eversion.evertM (\stream -> fmap (\(x,r) -> x :> r) (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))
+evertM phi = Streaming.Eversion.evertM (\stream -> fmap strictly (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))
 
 evertM_ :: Monad m => (forall t r. (MonadTrans t, Monad (t m)) => Producer a (t m) r -> t m r) 
         -> FoldM m a () -- ^
@@ -61,12 +64,20 @@
 
 evertMIO :: MonadIO m => (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> t m (x,r)) 
          -> FoldM m a x -- ^
-evertMIO phi = Streaming.Eversion.evertMIO (\stream -> fmap (\(x,r) -> x :> r) (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))
+evertMIO phi = Streaming.Eversion.evertMIO (\stream -> fmap strictly (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))
 
 evertMIO_ :: MonadIO m => (forall t r. (MonadTrans t, MonadIO (t m)) => Producer a (t m) r -> t m r) 
           -> FoldM m a () -- ^
 evertMIO_ phi = Streaming.Eversion.evertMIO_ (\stream -> phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream))
 
+--evertMR :: MonadResource m => (forall t r. (MonadTrans t, MonadResource (t m)) => Producer a (t m) r -> t m (x,r)) 
+--         -> FoldM m a x -- ^
+--evertMR phi = Streaming.Eversion.evertMR (\stream -> fmap strictly (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))
+
+--evertMR_ :: MonadResource m => (forall t r. (MonadTrans t, MonadResource (t m)) => Producer a (t m) r -> t m r) 
+--          -> FoldM m a () -- ^
+--evertMR_ phi = Streaming.Eversion.evertMR_ (\stream -> phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream))
+
 transvert :: (forall m r. Monad m => Producer a m r -> Producer b m r)
           -> Fold b x -- ^
           -> Fold a x 
@@ -83,6 +94,13 @@
              -> FoldM m b x -- ^
              -> FoldM m a x
 transvertMIO phi = Streaming.Eversion.transvertMIO (\stream -> Streaming.Prelude.unfoldr Pipes.next (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))
+
+--transvertMR :: MonadResource m 
+--             => (forall t r. (MonadTrans t, MonadResource (t m)) => Producer a (t m) r -> Producer b (t m) r)
+--             -> FoldM m b x -- ^
+--             -> FoldM m a x
+--transvertMR phi = Streaming.Eversion.transvertMR (\stream -> Streaming.Prelude.unfoldr Pipes.next (phi (Pipes.Prelude.unfoldr Streaming.Prelude.next stream)))
+
 
 {- $examples
  
diff --git a/streaming-eversion.cabal b/streaming-eversion.cabal
--- a/streaming-eversion.cabal
+++ b/streaming-eversion.cabal
@@ -1,5 +1,5 @@
 Name: streaming-eversion
-Version: 0.3.0.1
+Version: 0.3.1.0
 Cabal-Version: >=1.8.0.2
 Build-Type: Simple
 License: BSD3
