lifted-async 0.5.0.1 → 0.6.0
raw patch · 3 files changed
+85/−36 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Control.Concurrent.Async.Lifted.Safe: type Forall (p :: * -> Constraint) = (p A, p B)
- Control.Concurrent.Async.Lifted.Safe: async :: (MonadBaseControl IO m, StM m a ~ a) => m a -> m (Async a)
+ Control.Concurrent.Async.Lifted.Safe: async :: (MonadBaseControl IO m, Forall (Pure m)) => m a -> m (Async a)
- Control.Concurrent.Async.Lifted.Safe: asyncBound :: (MonadBaseControl IO m, StM m a ~ a) => m a -> m (Async a)
+ Control.Concurrent.Async.Lifted.Safe: asyncBound :: (MonadBaseControl IO m, Forall (Pure m)) => m a -> m (Async a)
- Control.Concurrent.Async.Lifted.Safe: asyncOn :: (MonadBaseControl IO m, StM m a ~ a) => Int -> m a -> m (Async a)
+ Control.Concurrent.Async.Lifted.Safe: asyncOn :: (MonadBaseControl IO m, Forall (Pure m)) => Int -> m a -> m (Async a)
- Control.Concurrent.Async.Lifted.Safe: asyncOnWithUnmask :: (MonadBaseControl IO m, StM m a ~ a) => Int -> ((forall b. m b -> m b) -> m a) -> m (Async a)
+ Control.Concurrent.Async.Lifted.Safe: asyncOnWithUnmask :: (MonadBaseControl IO m, Forall (Pure m)) => Int -> ((forall b. m b -> m b) -> m a) -> m (Async a)
- Control.Concurrent.Async.Lifted.Safe: asyncWithUnmask :: (MonadBaseControl IO m, StM m a ~ a) => ((forall b. m b -> m b) -> m a) -> m (Async a)
+ Control.Concurrent.Async.Lifted.Safe: asyncWithUnmask :: (MonadBaseControl IO m, Forall (Pure m)) => ((forall b. m b -> m b) -> m a) -> m (Async a)
- Control.Concurrent.Async.Lifted.Safe: concurrently :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b) => m a -> m b -> m (a, b)
+ Control.Concurrent.Async.Lifted.Safe: concurrently :: (MonadBaseControl IO m, Forall (Pure m)) => m a -> m b -> m (a, b)
- Control.Concurrent.Async.Lifted.Safe: poll :: (MonadBaseControl IO m, StM m a ~ a) => Async a -> m (Maybe (Either SomeException a))
+ Control.Concurrent.Async.Lifted.Safe: poll :: (MonadBaseControl IO m, Forall (Pure m)) => Async a -> m (Maybe (Either SomeException a))
- Control.Concurrent.Async.Lifted.Safe: race :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b) => m a -> m b -> m (Either a b)
+ Control.Concurrent.Async.Lifted.Safe: race :: (MonadBaseControl IO m, Forall (Pure m)) => m a -> m b -> m (Either a b)
- Control.Concurrent.Async.Lifted.Safe: race_ :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b) => m a -> m b -> m ()
+ Control.Concurrent.Async.Lifted.Safe: race_ :: (MonadBaseControl IO m, Forall (Pure m)) => m a -> m b -> m ()
- Control.Concurrent.Async.Lifted.Safe: wait :: (MonadBaseControl IO m, StM m a ~ a) => Async a -> m a
+ Control.Concurrent.Async.Lifted.Safe: wait :: (MonadBaseControl IO m, Forall (Pure m)) => Async a -> m a
- Control.Concurrent.Async.Lifted.Safe: waitAny :: (MonadBaseControl IO m, StM m a ~ a) => [Async a] -> m (Async a, a)
+ Control.Concurrent.Async.Lifted.Safe: waitAny :: (MonadBaseControl IO m, Forall (Pure m)) => [Async a] -> m (Async a, a)
- Control.Concurrent.Async.Lifted.Safe: waitAnyCancel :: (MonadBaseControl IO m, StM m a ~ a) => [Async a] -> m (Async a, a)
+ Control.Concurrent.Async.Lifted.Safe: waitAnyCancel :: (MonadBaseControl IO m, Forall (Pure m)) => [Async a] -> m (Async a, a)
- Control.Concurrent.Async.Lifted.Safe: waitAnyCatch :: (MonadBaseControl IO m, StM m a ~ a) => [Async a] -> m (Async a, Either SomeException a)
+ Control.Concurrent.Async.Lifted.Safe: waitAnyCatch :: (MonadBaseControl IO m, Forall (Pure m)) => [Async a] -> m (Async a, Either SomeException a)
- Control.Concurrent.Async.Lifted.Safe: waitAnyCatchCancel :: (MonadBaseControl IO m, StM m a ~ a) => [Async a] -> m (Async a, Either SomeException a)
+ Control.Concurrent.Async.Lifted.Safe: waitAnyCatchCancel :: (MonadBaseControl IO m, Forall (Pure m)) => [Async a] -> m (Async a, Either SomeException a)
- Control.Concurrent.Async.Lifted.Safe: waitBoth :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b) => Async a -> Async b -> m (a, b)
+ Control.Concurrent.Async.Lifted.Safe: waitBoth :: (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (a, b)
- Control.Concurrent.Async.Lifted.Safe: waitCatch :: (MonadBaseControl IO m, StM m a ~ a) => Async a -> m (Either SomeException a)
+ Control.Concurrent.Async.Lifted.Safe: waitCatch :: (MonadBaseControl IO m, Forall (Pure m)) => Async a -> m (Either SomeException a)
- Control.Concurrent.Async.Lifted.Safe: waitEither :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b) => Async a -> Async b -> m (Either a b)
+ Control.Concurrent.Async.Lifted.Safe: waitEither :: (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (Either a b)
- Control.Concurrent.Async.Lifted.Safe: waitEitherCancel :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b) => Async a -> Async b -> m (Either a b)
+ Control.Concurrent.Async.Lifted.Safe: waitEitherCancel :: (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (Either a b)
- Control.Concurrent.Async.Lifted.Safe: waitEitherCatch :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b) => Async a -> Async b -> m (Either (Either SomeException a) (Either SomeException b))
+ Control.Concurrent.Async.Lifted.Safe: waitEitherCatch :: (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (Either (Either SomeException a) (Either SomeException b))
- Control.Concurrent.Async.Lifted.Safe: waitEitherCatchCancel :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b) => Async a -> Async b -> m (Either (Either SomeException a) (Either SomeException b))
+ Control.Concurrent.Async.Lifted.Safe: waitEitherCatchCancel :: (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (Either (Either SomeException a) (Either SomeException b))
- Control.Concurrent.Async.Lifted.Safe: withAsync :: (MonadBaseControl IO m, StM m a ~ a) => m a -> (Async a -> m b) -> m b
+ Control.Concurrent.Async.Lifted.Safe: withAsync :: (MonadBaseControl IO m, Forall (Pure m)) => m a -> (Async a -> m b) -> m b
- Control.Concurrent.Async.Lifted.Safe: withAsyncBound :: (MonadBaseControl IO m, StM m a ~ a) => m a -> (Async a -> m b) -> m b
+ Control.Concurrent.Async.Lifted.Safe: withAsyncBound :: (MonadBaseControl IO m, Forall (Pure m)) => m a -> (Async a -> m b) -> m b
- Control.Concurrent.Async.Lifted.Safe: withAsyncOn :: (MonadBaseControl IO m, StM m a ~ a) => Int -> m a -> (Async a -> m b) -> m b
+ Control.Concurrent.Async.Lifted.Safe: withAsyncOn :: (MonadBaseControl IO m, Forall (Pure m)) => Int -> m a -> (Async a -> m b) -> m b
- Control.Concurrent.Async.Lifted.Safe: withAsyncOnWithUnmask :: (MonadBaseControl IO m, StM m a ~ a) => Int -> ((forall c. m c -> m c) -> m a) -> (Async a -> m b) -> m b
+ Control.Concurrent.Async.Lifted.Safe: withAsyncOnWithUnmask :: (MonadBaseControl IO m, Forall (Pure m)) => Int -> ((forall c. m c -> m c) -> m a) -> (Async a -> m b) -> m b
- Control.Concurrent.Async.Lifted.Safe: withAsyncWithUnmask :: (MonadBaseControl IO m, StM m a ~ a) => ((forall c. m c -> m c) -> m a) -> (Async a -> m b) -> m b
+ Control.Concurrent.Async.Lifted.Safe: withAsyncWithUnmask :: (MonadBaseControl IO m, Forall (Pure m)) => ((forall c. m c -> m c) -> m a) -> (Async a -> m b) -> m b
Files
- CHANGELOG.md +4/−0
- lifted-async.cabal +2/−2
- src/Control/Concurrent/Async/Lifted/Safe.hs +79/−34
CHANGELOG.md view
@@ -1,3 +1,7 @@+## v0.6.0 - 2015-01-13++* Replace `StM m a ~ a` in the type signatures with `Forall (Pure m)` (#12)+ ## v0.5.0.1 - 2014-12-29 * Fix build issues in the test suite (#11 and others)
lifted-async.cabal view
@@ -1,5 +1,5 @@ name: lifted-async-version: 0.5.0.1+version: 0.6.0 synopsis: Run lifted IO operations asynchronously and wait for their results homepage: https://github.com/maoe/lifted-async bug-reports: https://github.com/maoe/lifted-async/issues@@ -108,5 +108,5 @@ source-repository this type: git- tag: v0.5.0.1+ tag: v0.6.0 location: https://github.com/maoe/lifted-async.git
src/Control/Concurrent/Async/Lifted/Safe.hs view
@@ -35,6 +35,9 @@ #if MIN_VERSION_monad_control(1, 0, 0) -- * Asynchronous actions A.Async++ , Pure+ , Forall -- ** Spawning , async, asyncBound, asyncOn, asyncWithUnmask, asyncOnWithUnmask @@ -61,7 +64,8 @@ -- * Convenient utilities , race, race_, concurrently, mapConcurrently- , Concurrently(..), Pure+ , Concurrently(..)+ #endif ) where @@ -85,91 +89,112 @@ #endif -- | Generalized version of 'A.async'.-async :: (MonadBaseControl IO m, StM m a ~ a) => m a -> m (Async a)+async+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m))+ => m a -> m (Async a) async = Unsafe.async+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.asyncBound'.-asyncBound :: (MonadBaseControl IO m, StM m a ~ a) => m a -> m (Async a)+asyncBound+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m))+ => m a -> m (Async a) asyncBound = Unsafe.asyncBound+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.asyncOn'.-asyncOn :: (MonadBaseControl IO m, StM m a ~ a) => Int -> m a -> m (Async a)-asyncOn = Unsafe.asyncOn+asyncOn+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m))+ => Int -> m a -> m (Async a)+asyncOn cpu m = Unsafe.asyncOn cpu m+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.asyncWithUnmask'. asyncWithUnmask- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m)) => ((forall b. m b -> m b) -> m a) -> m (Async a)-asyncWithUnmask = Unsafe.asyncWithUnmask+asyncWithUnmask restore = Unsafe.asyncWithUnmask restore+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.asyncOnWithUnmask'. asyncOnWithUnmask- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m)) => Int -> ((forall b. m b -> m b) -> m a) -> m (Async a)-asyncOnWithUnmask = Unsafe.asyncOnWithUnmask+asyncOnWithUnmask cpu restore = Unsafe.asyncOnWithUnmask cpu restore+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.withAsync'. withAsync- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => m a -> (Async a -> m b) -> m b withAsync = Unsafe.withAsync+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.withAsyncBound'. withAsyncBound- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => m a -> (Async a -> m b) -> m b withAsyncBound = Unsafe.withAsyncBound+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.withAsyncOn'. withAsyncOn- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => Int -> m a -> (Async a -> m b) -> m b withAsyncOn = Unsafe.withAsyncOn+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.withAsyncWithUnmask'. withAsyncWithUnmask- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => ((forall c. m c -> m c) -> m a) -> (Async a -> m b) -> m b-withAsyncWithUnmask = Unsafe.withAsyncWithUnmask+withAsyncWithUnmask restore = Unsafe.withAsyncWithUnmask restore+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.withAsyncOnWithUnmask'. withAsyncOnWithUnmask- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => Int -> ((forall c. m c -> m c) -> m a) -> (Async a -> m b) -> m b-withAsyncOnWithUnmask = Unsafe.withAsyncOnWithUnmask+withAsyncOnWithUnmask cpu restore = Unsafe.withAsyncOnWithUnmask cpu restore+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.wait'.-wait :: (MonadBaseControl IO m, StM m a ~ a) => Async a -> m a+wait+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m))+ => Async a -> m a wait = Unsafe.wait+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.poll'. poll- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m)) => Async a -> m (Maybe (Either SomeException a)) poll = Unsafe.poll+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.waitCatch'. waitCatch- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m)) => Async a -> m (Either SomeException a) waitCatch = Unsafe.waitCatch+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.cancel'. cancel :: MonadBase IO m => Async a -> m ()@@ -181,88 +206,108 @@ -- | Generalized version of 'A.waitAny'. waitAny- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m)) => [Async a] -> m (Async a, a) waitAny = Unsafe.waitAny+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.waitAnyCatch'. waitAnyCatch- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m)) => [Async a] -> m (Async a, Either SomeException a) waitAnyCatch = Unsafe.waitAnyCatch+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.waitAnyCancel'. waitAnyCancel- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m)) => [Async a] -> m (Async a, a) waitAnyCancel = Unsafe.waitAnyCancel+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.waitAnyCatchCancel'. waitAnyCatchCancel- :: (MonadBaseControl IO m, StM m a ~ a)+ :: forall m a. (MonadBaseControl IO m, Forall (Pure m)) => [Async a] -> m (Async a, Either SomeException a) waitAnyCatchCancel = Unsafe.waitAnyCatchCancel+ \\ (inst :: Forall (Pure m) :- Pure m a) -- | Generalized version of 'A.waitEither'. waitEither- :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (Either a b) waitEither = Unsafe.waitEither+ \\ (inst :: Forall (Pure m) :- Pure m a)+ \\ (inst :: Forall (Pure m) :- Pure m b) -- | Generalized version of 'A.waitEitherCatch'. waitEitherCatch- :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (Either (Either SomeException a) (Either SomeException b)) waitEitherCatch = Unsafe.waitEitherCatch+ \\ (inst :: Forall (Pure m) :- Pure m a)+ \\ (inst :: Forall (Pure m) :- Pure m b) -- | Generalized version of 'A.waitEitherCancel'. waitEitherCancel- :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (Either a b) waitEitherCancel = Unsafe.waitEitherCancel+ \\ (inst :: Forall (Pure m) :- Pure m a)+ \\ (inst :: Forall (Pure m) :- Pure m b) -- | Generalized version of 'A.waitEitherCatchCancel'. waitEitherCatchCancel- :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (Either (Either SomeException a) (Either SomeException b)) waitEitherCatchCancel = Unsafe.waitEitherCatchCancel+ \\ (inst :: Forall (Pure m) :- Pure m a)+ \\ (inst :: Forall (Pure m) :- Pure m b) -- | Generalized version of 'A.waitBoth'. waitBoth- :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => Async a -> Async b -> m (a, b) waitBoth = Unsafe.waitBoth+ \\ (inst :: Forall (Pure m) :- Pure m a)+ \\ (inst :: Forall (Pure m) :- Pure m b) -- | Generalized version of 'A.race'. race- :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => m a -> m b -> m (Either a b) race = Unsafe.race+ \\ (inst :: Forall (Pure m) :- Pure m a)+ \\ (inst :: Forall (Pure m) :- Pure m b) -- | Generalized version of 'A.race_'. race_- :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => m a -> m b -> m () race_ = Unsafe.race_+ \\ (inst :: Forall (Pure m) :- Pure m a)+ \\ (inst :: Forall (Pure m) :- Pure m b) -- | Generalized version of 'A.concurrently'. concurrently- :: (MonadBaseControl IO m, StM m a ~ a, StM m b ~ b)+ :: forall m a b. (MonadBaseControl IO m, Forall (Pure m)) => m a -> m b -> m (a, b) concurrently = Unsafe.concurrently+ \\ (inst :: Forall (Pure m) :- Pure m a)+ \\ (inst :: Forall (Pure m) :- Pure m b) -- | Generalized version of 'A.mapConcurrently'. mapConcurrently@@ -294,9 +339,9 @@ Concurrently :: Forall (Pure m) => { runConcurrently :: m a } -> Concurrently m a --- | @'Pure' m a@ only means @m@ satisfies @'StM' m a ~ a@ (i.e. the monad--- @m@ has no monadic state). The boring 'Pure' class is necessary just to--- convince the GHC type checker.+-- | Most of the functions in this module have @'Forall' ('Pure' m)@ in their+-- constraints, which means they require the monad 'm' satisfies+-- @'StM' m a ~ a@ for all 'a'. class StM m a ~ a => Pure m a instance StM m a ~ a => Pure m a