diff --git a/hspec-dirstream.cabal b/hspec-dirstream.cabal
--- a/hspec-dirstream.cabal
+++ b/hspec-dirstream.cabal
@@ -1,5 +1,5 @@
 name:                hspec-dirstream
-version:             0.1.0.2
+version:             0.2.0.0
 synopsis:            Helper functions to simplify adding integration tests.
 description:         This package uses [hspec](http://hackage.haskell.org/package/hspec) and [dirstream](http://hackage.haskell.org/package/dirstream) to provide easy-to-use functions for integration tests.
 homepage:            https://hub.darcs.net/vmchale/hspec-dirstream
diff --git a/src/Test/Hspec/Dirstream.hs b/src/Test/Hspec/Dirstream.hs
--- a/src/Test/Hspec/Dirstream.hs
+++ b/src/Test/Hspec/Dirstream.hs
@@ -5,7 +5,10 @@
 {-# LANGUAGE StandaloneDeriving         #-}
 
 module Test.Hspec.Dirstream
-    ( testFiles
+    ( -- Functions to generate a `Spec`
+      testFiles
+    , testFilesIO
+    -- * Helper functions for dealing with file extensions
     , F.extension
     , Test.Hspec.Dirstream.hasExtension
     ) where
@@ -57,6 +60,15 @@
           -> (String -> Either a String) -- ^ Function to process a file
           -> SpecWith ()
 testFiles dir p f = runSafeT $ runEffect $ paths dir p >-> mapS (testFile f)
+
+testFilesIO :: FilePath -> (F.FilePath -> Bool) -> (String -> IO String) -> SpecWith ()
+testFilesIO dir p f = runSafeT $ runEffect $ paths dir p >-> mapS (testFileIO f)
+
+testFileIO :: (String -> IO String) -> String -> SpecWith ()
+testFileIO fun f = it f $ do
+    sample <- readFile f
+    expected <- readFile (replaceExtension f ".out")
+    fun sample >>= (`shouldBe` expected)
 
 testFile :: (Eq a, Show a) => (String -> Either a String) -> String -> SpecWith ()
 testFile fun f = it f $ do
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -8,7 +8,8 @@
 import           Test.Hspec.Dirstream
 
 main :: IO ()
-main = hspec $
-    describe "tail" $
-        parallel $
+main = hspec $ parallel $ do
+    describe "testFiles" $
             testFiles "test/data" (hasExtension "hs") ((pure :: a -> Either String a) . tail)
+    describe "testFilesIO" $
+            testFilesIO "test/data" (hasExtension "hs") (pure . tail)
