boots-0: Boot application by using plugins.

Copyright2019 Daniel YU
LicenseBSD3
Maintainerleptonyu@gmail.com
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Boots.Internal.Plugin

Description

This module defines a generic application plugin used when booting application.

Synopsis

Documentation

data Plugin i m u Source #

Plugin generates component u with the context of component i running in monad m.

Instances
MonadReader i (Plugin i m) Source # 
Instance details

Defined in Boots.Internal.Plugin

Methods

ask :: Plugin i m i #

local :: (i -> i) -> Plugin i m a -> Plugin i m a #

reader :: (i -> a) -> Plugin i m a #

MonadTrans (Plugin i) Source # 
Instance details

Defined in Boots.Internal.Plugin

Methods

lift :: Monad m => m a -> Plugin i m a #

Monad (Plugin i m) Source # 
Instance details

Defined in Boots.Internal.Plugin

Methods

(>>=) :: Plugin i m a -> (a -> Plugin i m b) -> Plugin i m b #

(>>) :: Plugin i m a -> Plugin i m b -> Plugin i m b #

return :: a -> Plugin i m a #

fail :: String -> Plugin i m a #

Functor (Plugin i m) Source # 
Instance details

Defined in Boots.Internal.Plugin

Methods

fmap :: (a -> b) -> Plugin i m a -> Plugin i m b #

(<$) :: a -> Plugin i m b -> Plugin i m a #

Applicative (Plugin i m) Source # 
Instance details

Defined in Boots.Internal.Plugin

Methods

pure :: a -> Plugin i m a #

(<*>) :: Plugin i m (a -> b) -> Plugin i m a -> Plugin i m b #

liftA2 :: (a -> b -> c) -> Plugin i m a -> Plugin i m b -> Plugin i m c #

(*>) :: Plugin i m a -> Plugin i m b -> Plugin i m b #

(<*) :: Plugin i m a -> Plugin i m b -> Plugin i m a #

MonadIO m => MonadIO (Plugin i m) Source # 
Instance details

Defined in Boots.Internal.Plugin

Methods

liftIO :: IO a -> Plugin i m a #

MonadThrow m => MonadThrow (Plugin i m) Source # 
Instance details

Defined in Boots.Internal.Plugin

Methods

throwM :: Exception e => e -> Plugin i m a #

Monad m => MonadCont (Plugin i m) Source # 
Instance details

Defined in Boots.Internal.Plugin

Methods

callCC :: ((a -> Plugin i m b) -> Plugin i m a) -> Plugin i m a #

runPlugin :: i -> Plugin i m u -> (u -> m ()) -> m () Source #

Run plugin in given context i.

promote :: i -> Plugin i m u -> Plugin x m u Source #

Promote a plugin into another plugin.

bracketP Source #

Arguments

:: 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