essence-of-live-coding-0.2.8: General purpose live coding framework
Safe HaskellNone
LanguageHaskell2010

LiveCoding.HandlingState

Synopsis

Documentation

data Handling h Source #

Constructors

Handling 

Fields

data HandlingState (m :: Type -> Type) Source #

Hold a map of registered handle keys and destructors

Constructors

HandlingState 

Instances

Instances details
(Typeable m, Launchable m) => Launchable (HandlingStateT m) Source # 
Instance details

Defined in LiveCoding.RuntimeIO.Launch

Typeable m => Data (HandlingState m) Source # 
Instance details

Defined in LiveCoding.HandlingState

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> HandlingState m -> c (HandlingState m) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (HandlingState m) #

toConstr :: HandlingState m -> Constr #

dataTypeOf :: HandlingState m -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (HandlingState m)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (HandlingState m)) #

gmapT :: (forall b. Data b => b -> b) -> HandlingState m -> HandlingState m #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> HandlingState m -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> HandlingState m -> r #

gmapQ :: (forall d. Data d => d -> u) -> HandlingState m -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> HandlingState m -> u #

gmapM :: Monad m0 => (forall d. Data d => d -> m0 d) -> HandlingState m -> m0 (HandlingState m) #

gmapMp :: MonadPlus m0 => (forall d. Data d => d -> m0 d) -> HandlingState m -> m0 (HandlingState m) #

gmapMo :: MonadPlus m0 => (forall d. Data d => d -> m0 d) -> HandlingState m -> m0 (HandlingState m) #

type HandlingStateT (m :: Type -> Type) = StateT (HandlingState m) m Source #

In this monad, handles can be registered, and their destructors automatically executed. It is basically a monad in which handles are automatically garbage collected.

runHandlingStateT :: Monad m => HandlingStateT m a -> m a Source #

Handle the HandlingStateT effect _without_ garbage collection. Apply this to your main loop after calling foreground. Since there is no garbage collection, don't use this function for live coding.

runHandlingStateC :: forall (m :: Type -> Type) a b. (Monad m, Typeable m) => Cell (HandlingStateT m) a b -> Cell m a b Source #

Apply this to your main live cell before passing it to the runtime.

On the first tick, it initialises the HandlingState at "no handles".

On every step, it does:

  1. Unregister all handles
  2. Register currently present handles
  3. Destroy all still unregistered handles (i.e. those that were removed in the last tick)

runHandlingState :: forall (m :: Type -> Type). (Monad m, Typeable m) => LiveProgram (HandlingStateT m) -> LiveProgram m Source #

Like runHandlingStateC, but for whole live programs.

garbageCollected :: forall (m :: Type -> Type) a. Monad m => HandlingStateT m a -> HandlingStateT m a Source #

data Destructor (m :: Type -> Type) Source #

Constructors

Destructor 

Fields

Instances

Instances details
Typeable m => Data (Destructor m) Source # 
Instance details

Defined in LiveCoding.HandlingState

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Destructor m -> c (Destructor m) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Destructor m) #

toConstr :: Destructor m -> Constr #

dataTypeOf :: Destructor m -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Destructor m)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Destructor m)) #

gmapT :: (forall b. Data b => b -> b) -> Destructor m -> Destructor m #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Destructor m -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Destructor m -> r #

gmapQ :: (forall d. Data d => d -> u) -> Destructor m -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Destructor m -> u #

gmapM :: Monad m0 => (forall d. Data d => d -> m0 d) -> Destructor m -> m0 (Destructor m) #

gmapMp :: MonadPlus m0 => (forall d. Data d => d -> m0 d) -> Destructor m -> m0 (Destructor m) #

gmapMo :: MonadPlus m0 => (forall d. Data d => d -> m0 d) -> Destructor m -> m0 (Destructor m) #

register Source #

Arguments

:: Monad m 
=> m ()

Destructor

-> HandlingStateT m Key 

reregister :: Monad m => m () -> Key -> HandlingStateT m () Source #

unregisterAll :: forall (m :: Type -> Type). Monad m => HandlingStateT m () Source #

destroyUnregistered :: forall (m :: Type -> Type). Monad m => HandlingStateT m () Source #

Data instances