acquire 0.1 → 0.2
raw patch · 4 files changed
+53/−50 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Acquire: Acquire :: (IO (resource, IO ())) -> Acquire resource
- Acquire: instance Control.Monad.IO.Class.MonadIO Acquire.Acquire
- Acquire: instance GHC.Base.Applicative Acquire.Acquire
- Acquire: instance GHC.Base.Functor Acquire.Acquire
- Acquire: instance GHC.Base.Monad Acquire.Acquire
- Acquire: newtype Acquire resource
- Acquire: with :: Acquire resource -> (resource -> IO a) -> IO a
+ Acquire.Acquire: Acquire :: (IO (resource, IO ())) -> Acquire resource
+ Acquire.Acquire: instance Control.Monad.IO.Class.MonadIO Acquire.Acquire.Acquire
+ Acquire.Acquire: instance GHC.Base.Applicative Acquire.Acquire.Acquire
+ Acquire.Acquire: instance GHC.Base.Functor Acquire.Acquire.Acquire
+ Acquire.Acquire: instance GHC.Base.Monad Acquire.Acquire.Acquire
+ Acquire.Acquire: newtype Acquire resource
+ Acquire.IO: acquire :: Acquire resource -> (resource -> IO a) -> IO a
Files
- acquire.cabal +3/−2
- library/Acquire.hs +0/−48
- library/Acquire/Acquire.hs +38/−0
- library/Acquire/IO.hs +12/−0
acquire.cabal view
@@ -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:
− library/Acquire.hs
@@ -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
+ library/Acquire/Acquire.hs view
@@ -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)
+ library/Acquire/IO.hs view
@@ -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