eve-0.1.2: An extensible event framework

Safe HaskellNone
LanguageHaskell2010

Eve.Internal.Actions

Synopsis

Documentation

newtype AppF base m next Source #

A Free Functor for storing lifted App actions.

Constructors

LiftApp (StateT base m next) 

Instances

Functor m => Functor (AppF base m) Source # 

Methods

fmap :: (a -> b) -> AppF base m a -> AppF base m b #

(<$) :: a -> AppF base m b -> AppF base m a #

Monad m => Applicative (AppF base m) Source # 

Methods

pure :: a -> AppF base m a #

(<*>) :: AppF base m (a -> b) -> AppF base m a -> AppF base m b #

(*>) :: AppF base m a -> AppF base m b -> AppF base m b #

(<*) :: AppF base m a -> AppF base m b -> AppF base m a #

Monad n => MonadFree (AppF base n) (ActionT base zoomed n) Source # 

Methods

wrap :: AppF base n (ActionT base zoomed n a) -> ActionT base zoomed n a #

newtype ActionT base zoomed m a Source #

Base Action type. Allows paramaterization over application state, zoomed state and underlying monad.

Constructors

ActionT 

Fields

Instances

Monad m => MonadState zoomed (ActionT base zoomed m) Source # 

Methods

get :: ActionT base zoomed m zoomed #

put :: zoomed -> ActionT base zoomed m () #

state :: (zoomed -> (a, zoomed)) -> ActionT base zoomed m a #

MonadTrans (ActionT base zoomed) Source # 

Methods

lift :: Monad m => m a -> ActionT base zoomed m a #

Monad n => MonadFree (AppF base n) (ActionT base zoomed n) Source # 

Methods

wrap :: AppF base n (ActionT base zoomed n a) -> ActionT base zoomed n a #

Monad m => Monad (ActionT base zoomed m) Source # 

Methods

(>>=) :: ActionT base zoomed m a -> (a -> ActionT base zoomed m b) -> ActionT base zoomed m b #

(>>) :: ActionT base zoomed m a -> ActionT base zoomed m b -> ActionT base zoomed m b #

return :: a -> ActionT base zoomed m a #

fail :: String -> ActionT base zoomed m a #

Monad m => Functor (ActionT base zoomed m) Source # 

Methods

fmap :: (a -> b) -> ActionT base zoomed m a -> ActionT base zoomed m b #

(<$) :: a -> ActionT base zoomed m b -> ActionT base zoomed m a #

Monad m => Applicative (ActionT base zoomed m) Source # 

Methods

pure :: a -> ActionT base zoomed m a #

(<*>) :: ActionT base zoomed m (a -> b) -> ActionT base zoomed m a -> ActionT base zoomed m b #

(*>) :: ActionT base zoomed m a -> ActionT base zoomed m b -> ActionT base zoomed m b #

(<*) :: ActionT base zoomed m a -> ActionT base zoomed m b -> ActionT base zoomed m a #

MonadIO m => MonadIO (ActionT base zoomed m) Source # 

Methods

liftIO :: IO a -> ActionT base zoomed m a #

Monad m => Zoom (ActionT base s m) (ActionT base t m) s t Source # 

Methods

zoom :: LensLike' (Zoomed (ActionT base s m) c) t s -> ActionT base s m c -> ActionT base t m c #

type Zoomed (ActionT base zoomed m) Source # 
type Zoomed (ActionT base zoomed m) = Zoomed (FreeT (AppF base m) (StateT zoomed m))

type AppT s m a = ActionT s s m a Source #

An App has the same base and zoomed values.

runApp :: Monad m => base -> AppT base m a -> m (a, base) Source #

Runs an application and returns the value and state.

evalApp :: Monad m => base -> AppT base m a -> m a Source #

Runs an application and returns the resulting value.

execApp :: Monad m => base -> AppT base m a -> m base Source #

Runs an application and returns the resulting state.

liftApp :: Monad m => AppT base m a -> ActionT base zoomed m a Source #

Allows you to run an App or AppM inside of an Action or ActionM

runAction :: Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c Source #

Given a Lens or Traversal or something similar from Control.Lens which focuses the state (t) of an Action from a base state (s), this will convert Action t a -> Action s a.

Given a lens HasStates s => Lens' s t it can also convert Action t a -> App a