Copyright | 2019 Daniel YU |
---|---|
License | BSD3 |
Maintainer | leptonyu@gmail.com |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Boot plugin.
Synopsis
- boot :: Monad m => Plugin () m (m ()) -> m ()
- data Plugin i m u
- runPlugin :: i -> Plugin i m u -> (u -> m ()) -> m ()
- promote :: i -> Plugin i m u -> Plugin x m u
- combine :: [Plugin i m i] -> Plugin i m i
- withPlugin :: (i -> j) -> Plugin j m u -> Plugin i m u
- mapPlugin :: (m () -> m ()) -> Plugin i m u -> Plugin i m u
- isoPlugin :: (m () -> n ()) -> (n () -> m ()) -> Plugin i n u -> Plugin i m u
- bracketP :: forall m i u. MonadCatch m => m u -> (u -> m ()) -> Plugin i m u
- wrapP :: ((u -> m ()) -> m ()) -> Plugin i m u
Documentation
Plugin generates component u
with the context of component i
running in monad m
.
Instances
MonadReader i (Plugin i m) Source # | |
MonadTrans (Plugin i) Source # | |
Defined in Boots.Internal.Plugin | |
Monad (Plugin i m) Source # | |
Functor (Plugin i m) Source # | |
Applicative (Plugin i m) Source # | |
Defined in Boots.Internal.Plugin | |
MonadIO m => MonadIO (Plugin i m) Source # | |
Defined in Boots.Internal.Plugin | |
MonadThrow m => MonadThrow (Plugin i m) Source # | |
Defined in Boots.Internal.Plugin | |
(MonadIO m, HasLogger cxt) => MonadLogger (Plugin cxt m) Source # | |
Defined in Boots.Plugin.Logger | |
(MonadIO m, HasLogger cxt) => MonadLoggerIO (Plugin cxt m) Source # | |
Defined in Boots.Plugin.Logger | |
Monad m => MonadCont (Plugin i m) Source # | |
HasSalak cxt => MonadSalak (Plugin cxt m) Source # | |
Defined in Boots.Plugin.Salak |
withPlugin :: (i -> j) -> Plugin j m u -> Plugin i m u Source #
Convert a plugin into another.
mapPlugin :: (m () -> m ()) -> Plugin i m u -> Plugin i m u Source #
Apply a function to transform the result of a continuation-passing computation.
isoPlugin :: (m () -> n ()) -> (n () -> m ()) -> Plugin i n u -> Plugin i m u Source #
Transform a plugin with monad n
to a plugin with monad m
.
:: MonadCatch m | |
=> m u | Open resource. |
-> (u -> m ()) | Close resource. |
-> Plugin i m u | Resource plugin. |
Create bracket style plugin, used for manage resources, which need to open and close.
A simple example:
>>>
res = bracketP (putStrLn "open") (const $ putStrLn "close")
>>>
runPlugin () res (const $ putStrLn "using")
open using close