diff --git a/csv-conduit.cabal b/csv-conduit.cabal
--- a/csv-conduit.cabal
+++ b/csv-conduit.cabal
@@ -1,5 +1,5 @@
 Name:                csv-conduit
-Version:             0.3.0.3
+Version:             0.4.1
 Synopsis:            A flexible, fast, conduit-based CSV parser library for Haskell.
 Homepage:            http://github.com/ozataman/csv-conduit
 License:             BSD3
diff --git a/src/Data/CSV/Conduit.hs b/src/Data/CSV/Conduit.hs
--- a/src/Data/CSV/Conduit.hs
+++ b/src/Data/CSV/Conduit.hs
@@ -99,13 +99,13 @@
   -----------------------------------------------------------------------------
   -- | Turn a stream of 's' into a stream of CSV row type. An example
   -- would be parsing a ByteString stream as rows of 'MapRow' 'Text'.
-  intoCSV :: MonadResource m => CSVSettings -> GLInfConduit s m r
+  intoCSV :: (MonadThrow m) => CSVSettings -> GLInfConduit s m r
 
   -----------------------------------------------------------------------------
   -- | Turn a stream of CSV row type back into a stream of 's'. An
   -- example would be rendering a stream of 'Row' 'ByteString' rows as
   -- 'Text'.
-  fromCSV :: MonadResource m => CSVSettings -> GInfConduit r m s
+  fromCSV :: Monad m => CSVSettings -> GInfConduit r m s
 
 
 
@@ -153,6 +153,17 @@
 
 
 -------------------------------------------------------------------------------
+-- | 'Row' instance using 'String' based on 'ByteString' stream.
+-- Please note this uses the ByteString operations underneath and has
+-- lots of unnecessary overhead. Included for convenience.
+instance CSV ByteString (Row String) where
+    rowToStr s r = rowToStr s $ map B8.pack r
+    intoCSV set = intoCSV set >+> C.map (map B8.unpack)
+    fromCSV set = C.map (map B8.pack) >+> fromCSV set
+
+
+
+-------------------------------------------------------------------------------
 fromCSVRow :: (Monad m, IsString s, CSV s r)
            => CSVSettings -> GInfConduit r m s
 fromCSVRow set = do
@@ -189,7 +200,7 @@
 
 
 -------------------------------------------------------------------------------
-intoCSVMap :: (Ord a, MonadResource m, CSV s [a])
+intoCSVMap :: (Ord a, MonadThrow m, CSV s [a])
            => CSVSettings -> GLInfConduit s m (MapRow a)
 intoCSVMap set = intoCSV set >+> (headers >>= converter)
   where
@@ -225,7 +236,7 @@
 --
 -- > ... =$= writeHeaders settings >> fromCSV settings $$ sinkFile "..."
 writeHeaders
-    :: (MonadResource m, CSV s (Row r), IsString s)
+    :: (Monad m, CSV s (Row r), IsString s)
     => CSVSettings
     -> GConduit (MapRow r) m s
 writeHeaders set = do
@@ -284,7 +295,7 @@
 -- An easy way to run this function would be 'runResourceT' after
 -- feeding it all the arguments.
 mapCSVFile
-    :: (MonadResource m, CSV ByteString a, CSV ByteString b)
+    :: (MonadResource m, MonadThrow m, CSV ByteString a, CSV ByteString b)
     => CSVSettings
     -- ^ Settings to use both for input and output
     -> (a -> [b])
@@ -311,7 +322,7 @@
 --
 -- > transformCSV set (sourceFile inFile) (C.map f) (sinkFile outFile)
 transformCSV
-    :: (MonadResource m, CSV s a, CSV s' b)
+    :: (MonadThrow m, CSV s a, CSV s' b)
     => CSVSettings
     -- ^ Settings to be used for input and output
     -> Source m s
