diff --git a/library/Potoki/Cereal/Consume.hs b/library/Potoki/Cereal/Consume.hs
--- a/library/Potoki/Cereal/Consume.hs
+++ b/library/Potoki/Cereal/Consume.hs
@@ -3,31 +3,34 @@
 
 import Potoki.Cereal.Prelude
 import Potoki.Core.Consume
-import Data.Serialize
+import qualified Data.Serialize as Serialize
 import qualified Potoki.Core.Fetch as E
 import qualified Potoki.Cereal.Transform as D
 
 
-get :: Get a -> Consume ByteString (Either Text a)
+get :: Serialize.Get a -> Consume ByteString (Either Text a)
 get get =
   Consume $ \ (E.Fetch fetchIO) ->
   let
     loop decodeChunk =
       let
         none = case decodeChunk "" of
-          Done result _ -> return (Right result)
-          Fail error _ -> return (Left (fromString error))
+          Serialize.Done result _ -> return (Right result)
+          Serialize.Fail error _ -> return (Left (fromString error))
           _ -> return (Left "Not enough data")
         some chunk = case decodeChunk chunk of
-          Partial newDecodeChunk -> loop newDecodeChunk
-          Done result _ -> return (Right result)
-          Fail error _ -> return (Left (fromString error))
+          Serialize.Partial newDecodeChunk -> loop newDecodeChunk
+          Serialize.Done result _ -> return (Right result)
+          Serialize.Fail error _ -> return (Left (fromString error))
         in do
           fetch <- fetchIO
           case fetch of
             Nothing -> none
             Just res -> some res
-    in loop (runGetPartial get)
-    
+    in loop (Serialize.runGetPartial get)
+
+getImplicitly :: Serialize a => Consume ByteString (Either Text a)
+getImplicitly = get Serialize.get
+
 encodeToFile :: Serialize a => FilePath -> Consume a (Either IOException ())
 encodeToFile = transform D.encode . writeBytesToFile
diff --git a/library/Potoki/Cereal/IO.hs b/library/Potoki/Cereal/IO.hs
new file mode 100644
--- /dev/null
+++ b/library/Potoki/Cereal/IO.hs
@@ -0,0 +1,17 @@
+module Potoki.Cereal.IO
+where
+
+import Potoki.Cereal.Prelude
+import Potoki.Core.IO
+import qualified Data.Serialize as Serialize
+import qualified Potoki.Core.Produce as Produce
+import qualified Potoki.Core.Consume as Consume
+import qualified Potoki.Cereal.Consume as CerealConsume
+import qualified Potoki.Cereal.Produce as CerealProduce
+
+
+deserializeFromFile :: Serialize a => FilePath -> IO (Either IOException (Either Text a))
+deserializeFromFile file = produceAndConsume (Produce.fileBytes file) (right' (CerealConsume.getImplicitly))
+
+serializeToFile :: Serialize a => FilePath -> a -> IO (Either IOException ())
+serializeToFile file a = produceAndConsume (CerealProduce.putImplicitly a) (Consume.writeBytesToFile file)
diff --git a/library/Potoki/Cereal/Prelude.hs b/library/Potoki/Cereal/Prelude.hs
--- a/library/Potoki/Cereal/Prelude.hs
+++ b/library/Potoki/Cereal/Prelude.hs
@@ -15,3 +15,13 @@
 -- text
 -------------------------
 import Data.Text as Exports (Text)
+
+-- cereal
+-------------------------
+import Data.Serialize as Exports (Serialize)
+
+-- profunctors
+-------------------------
+import Data.Profunctor.Unsafe as Exports
+import Data.Profunctor.Choice as Exports
+import Data.Profunctor.Strong as Exports
diff --git a/library/Potoki/Cereal/Produce.hs b/library/Potoki/Cereal/Produce.hs
--- a/library/Potoki/Cereal/Produce.hs
+++ b/library/Potoki/Cereal/Produce.hs
@@ -3,7 +3,6 @@
 
 import Potoki.Cereal.Prelude
 import Potoki.Core.Produce
-import Data.Serialize
 import qualified Data.ByteString.Lazy as A
 import qualified Data.ByteString.Lazy.Internal as A
 import qualified Potoki.Cereal.Transform as D
@@ -11,14 +10,16 @@
 import Potoki.Core.Transform
 
 
-put :: Put -> Produce ByteString
-put =
-  lazyByteString . runPutLazy
+put :: C.Put -> Produce ByteString
+put = lazyByteString . C.runPutLazy
 
-fileDecoded :: C.Serialize a => FilePath -> Produce (Either IOException (Either Text a))
+putImplicitly :: Serialize a => a -> Produce ByteString
+putImplicitly = put . C.put
+
+fileDecoded :: Serialize a => FilePath -> Produce (Either IOException (Either Text a))
 fileDecoded = transform (right D.decode) . fileBytes
 
-directoryDecoded :: C.Serialize a => FilePath -> Produce (Either IOException (Either Text a))
+directoryDecoded :: Serialize a => FilePath -> Produce (Either IOException (Either Text a))
 directoryDecoded dirPath =
   transform
     (right (produce fileDecoded) >>^ join)
diff --git a/potoki-cereal.cabal b/potoki-cereal.cabal
--- a/potoki-cereal.cabal
+++ b/potoki-cereal.cabal
@@ -1,5 +1,5 @@
 name: potoki-cereal
-version: 0.3.0.1
+version: 0.3.1
 synopsis: Streaming serialization
 category: Potoki, Streaming
 homepage: https://github.com/metrix-ai/potoki-cereal
@@ -20,6 +20,7 @@
     Potoki.Cereal.Consume
     Potoki.Cereal.Produce
     Potoki.Cereal.Transform
+    Potoki.Cereal.IO
   other-modules:
     Potoki.Cereal.Prelude
   build-depends:
@@ -29,7 +30,8 @@
     base-prelude >=1 && <2,
     bytestring >=0.10 && <0.11,
     cereal >=0.5 && <0.6,
-    potoki-core >=2.2.1 && <2.3,
+    potoki-core >=2.3 && <2.4,
+    profunctors >=5.2 && <6,
     text >=1 && <2
 
 test-suite test
@@ -40,7 +42,7 @@
   main-is: Main.hs
   build-depends:
     directory >=1.2 && <2,
-    potoki >=2 && <2.1,
+    potoki >=2.1 && <2.2,
     potoki-cereal,
     QuickCheck >=2.8.1 && <3,
     quickcheck-instances >=0.3.11 && <0.4,
