diff --git a/library/Potoki/Core/Consume.hs b/library/Potoki/Core/Consume.hs
--- a/library/Potoki/Core/Consume.hs
+++ b/library/Potoki/Core/Consume.hs
@@ -38,19 +38,31 @@
 instance Functor (Consume input) where
   fmap = rmap
 
-instance Applicative (Consume input) where
-  pure x =
-    Consume (const (pure x))
-  (<*>) (Consume leftConsumeIO) (Consume rightConsumeIO) =
-    Consume $ \ fetch -> do
-      (leftFetch, rightFetch) <- A.duplicate fetch
-      rightOutputVar <- newEmptyMVar
-      forkIO $ do
-        !rightOutput <- rightConsumeIO rightFetch
-        putMVar rightOutputVar rightOutput
-      !leftOutput <- leftConsumeIO leftFetch
-      rightOutput <- takeMVar rightOutputVar
-      return (leftOutput rightOutput)
+instance Applicative (Consume a) where
+  pure x = Consume $ \_ -> pure x
+
+  Consume leftConsumeIO <*> Consume rightConsumeIO =
+    Consume $ \fetch -> leftConsumeIO fetch <*> rightConsumeIO fetch
+
+instance Monad (Consume a) where
+  Consume leftConsumeIO >>= toRightConsumeIO = Consume $ \fetch -> do
+    Consume rightConsumeIO <- toRightConsumeIO <$> leftConsumeIO fetch
+    rightConsumeIO fetch
+
+instance MonadIO (Consume a) where
+  liftIO a = Consume $ \_ -> a
+
+apConcurrently :: Consume a (b -> c) -> Consume a b -> Consume a c
+apConcurrently (Consume leftConsumeIO) (Consume rightConsumeIO) =
+  Consume $ \ fetch -> do
+    (leftFetch, rightFetch) <- A.duplicate fetch
+    rightOutputVar <- newEmptyMVar
+    forkIO $ do
+      !rightOutput <- rightConsumeIO rightFetch
+      putMVar rightOutputVar rightOutput
+    !leftOutput <- leftConsumeIO leftFetch
+    rightOutput <- takeMVar rightOutputVar
+    return (leftOutput rightOutput)
 
 {-# INLINABLE list #-}
 list :: Consume input [input]
diff --git a/library/Potoki/Core/Prelude.hs b/library/Potoki/Core/Prelude.hs
--- a/library/Potoki/Core/Prelude.hs
+++ b/library/Potoki/Core/Prelude.hs
@@ -12,6 +12,7 @@
 import Control.Concurrent as Exports
 import Control.Exception as Exports
 import Control.Monad as Exports hiding (mapM_, sequence_, forM_, msum, mapM, sequence, forM)
+import Control.Monad.IO.Class as Exports
 import Control.Monad.Fix as Exports hiding (fix)
 import Control.Monad.ST as Exports
 import Data.Bits as Exports
diff --git a/potoki-core.cabal b/potoki-core.cabal
--- a/potoki-core.cabal
+++ b/potoki-core.cabal
@@ -1,7 +1,7 @@
 name:
   potoki-core
 version:
-  1.2
+  1.3
 synopsis:
   Low-level components of "potoki"
 description:
