diff --git a/acquire.cabal b/acquire.cabal
--- a/acquire.cabal
+++ b/acquire.cabal
@@ -1,7 +1,7 @@
 name:
   acquire
 version:
-  0.1
+  0.2
 synopsis:
   Abstraction over management of resources
 description:
@@ -42,7 +42,8 @@
   default-language:
     Haskell2010
   exposed-modules:
-    Acquire
+    Acquire.Acquire
+    Acquire.IO
   other-modules:
     Acquire.Prelude
   build-depends:
diff --git a/library/Acquire.hs b/library/Acquire.hs
deleted file mode 100644
--- a/library/Acquire.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-module Acquire
-(
-  Acquire(..),
-  with,
-)
-where
-
-import Acquire.Prelude
-
-
-{-|
-Implementation of http://www.haskellforall.com/2013/06/the-resource-applicative.html
--}
-newtype Acquire resource =
-  Acquire (IO (resource, IO ()))
-
-instance Functor Acquire where
-  fmap f (Acquire io) =
-    Acquire $ do
-      (resource, release) <- io
-      return (f resource, release)
-
-instance Applicative Acquire where
-  pure resource =
-    Acquire (pure (resource, pure ()))
-  Acquire io1 <*> Acquire io2 =
-    Acquire $ do
-      (f, release1) <- io1
-      (x, release2) <- onException io2 release1
-      return (f x, release2 >> release1)
-
-instance Monad Acquire where
-  return = pure
-  (>>=) (Acquire io1) k2 =
-    Acquire $ do
-      (resource1, release1) <- io1
-      (resource2, release2) <- case k2 resource1 of Acquire io2 -> onException io2 release1
-      return (resource2, release2 >> release1)
-
-instance MonadIO Acquire where
-  liftIO io =
-    Acquire (fmap (, return ()) io)
-
-with :: Acquire resource -> (resource -> IO a) -> IO a
-with (Acquire io) handle =
-  do
-    (resource, release) <- io
-    finally (handle resource) release
diff --git a/library/Acquire/Acquire.hs b/library/Acquire/Acquire.hs
new file mode 100644
--- /dev/null
+++ b/library/Acquire/Acquire.hs
@@ -0,0 +1,38 @@
+module Acquire.Acquire
+where
+
+import Acquire.Prelude
+
+
+{-|
+Implementation of http://www.haskellforall.com/2013/06/the-resource-applicative.html
+-}
+newtype Acquire resource =
+  Acquire (IO (resource, IO ()))
+
+instance Functor Acquire where
+  fmap f (Acquire io) =
+    Acquire $ do
+      (resource, release) <- io
+      return (f resource, release)
+
+instance Applicative Acquire where
+  pure resource =
+    Acquire (pure (resource, pure ()))
+  Acquire io1 <*> Acquire io2 =
+    Acquire $ do
+      (f, release1) <- io1
+      (x, release2) <- onException io2 release1
+      return (f x, release2 >> release1)
+
+instance Monad Acquire where
+  return = pure
+  (>>=) (Acquire io1) k2 =
+    Acquire $ do
+      (resource1, release1) <- io1
+      (resource2, release2) <- case k2 resource1 of Acquire io2 -> onException io2 release1
+      return (resource2, release2 >> release1)
+
+instance MonadIO Acquire where
+  liftIO io =
+    Acquire (fmap (, return ()) io)
diff --git a/library/Acquire/IO.hs b/library/Acquire/IO.hs
new file mode 100644
--- /dev/null
+++ b/library/Acquire/IO.hs
@@ -0,0 +1,12 @@
+module Acquire.IO
+where
+
+import Acquire.Prelude
+import Acquire.Acquire
+
+
+acquire :: Acquire resource -> (resource -> IO a) -> IO a
+acquire (Acquire io) handle =
+  do
+    (resource, release) <- io
+    finally (handle resource) release
