moffy-0.1.1.0: Monadic Functional Reactive Programming
Safe HaskellNone
LanguageHaskell2010

Control.Moffy.Handle

Synopsis

Constraint

type ExpandableHandle (es :: Set Type) (es' :: Set Type) = (ExpandableOccurred es es', Collapsable es' es) Source #

type ExpandableOccurred (es :: Set Type) (es' :: Set Type) = Expandable Occurred es es' Source #

type MergeableOccurred (es :: Set Type) (es' :: Set Type) (mrg :: Set Type) = Mergeable Occurred es es' mrg Source #

Plain Handle

Type

type Handle (m :: Type -> Type) (es :: Set Type) = EvReqs es -> m (EvOccs es) Source #

type Handle' (m :: Type -> Type) (es :: Set Type) = EvReqs es -> m (Maybe (EvOccs es)) Source #

Composer

retry :: forall m (es :: Set Type). Monad m => Handle' m es -> Handle m es Source #

sleep :: forall (es :: Set Type). Int -> Handle' IO es -> Handle' IO es Source #

sleepIfNothing :: forall (es :: Set Type). Int -> Handle' IO es -> Handle' IO es Source #

expand :: forall m (es :: Set Type) (es' :: Set Type). (Applicative m, ExpandableHandle es es') => Handle' m es -> Handle' m es' Source #

before :: forall m (es :: Set Type) (es' :: Set Type). (Monad m, ExpandableHandle es (es :+: es'), ExpandableHandle es' (es :+: es')) => Handle' m es -> Handle' m es' -> Handle' m (es :+: es') infixr 5 Source #

merge :: forall m (es :: Set Type) (es' :: Set Type). (Applicative m, ExpandableHandle es (es :+: es'), ExpandableHandle es' (es :+: es'), MergeableOccurred es es' (es :+: es')) => Handle' m es -> Handle' m es' -> Handle' m (es :+: es') infixr 6 Source #

Handle with State

Type

type HandleSt st (m :: Type -> Type) (es :: Set Type) = EvReqs es -> St st m (EvOccs es) Source #

type HandleSt' st (m :: Type -> Type) (es :: Set Type) = EvReqs es -> St st m (Maybe (EvOccs es)) Source #

type HandleSt' st m es = HandleIo' st st m es

type St st (m :: Type -> Type) a = st -> m (a, st) Source #

liftHandle :: forall m (es :: Set Type) st. Functor m => Handle m es -> HandleSt st m es Source #

liftHandle' :: forall m (es :: Set Type) st. Functor m => Handle' m es -> HandleSt' st m es Source #

liftSt :: Functor m => m r -> St st m r Source #

Composer

retrySt :: forall m st (es :: Set Type). Monad m => HandleSt' st m es -> HandleSt st m es Source #

expandSt :: forall m (es :: Set Type) (es' :: Set Type) st. (Applicative m, ExpandableHandle es es') => HandleSt' st m es -> HandleSt' st m es' Source #

beforeSt :: forall m (es :: Set Type) (es' :: Set Type) st. (Monad m, ExpandableHandle es (es :+: es'), ExpandableHandle es' (es :+: es')) => HandleSt' st m es -> HandleSt' st m es' -> HandleSt' st m (es :+: es') infixr 5 Source #

mergeSt :: forall m (es :: Set Type) (es' :: Set Type) st. (Monad m, ExpandableHandle es (es :+: es'), ExpandableHandle es' (es :+: es'), MergeableOccurred es es' (es :+: es')) => HandleSt' st m es -> HandleSt' st m es' -> HandleSt' st m (es :+: es') infixr 6 Source #

Handle with Input and Output

Type

type HandleIo' i o (m :: Type -> Type) (es :: Set Type) = EvReqs es -> i -> m (Maybe (EvOccs es), o) Source #

pushInput :: forall a st m (es :: Set Type). (a -> HandleSt' st m es) -> HandleIo' (a, st) st m es Source #

popInput :: forall a st m (es :: Set Type). HandleIo' (a, st) st m es -> a -> HandleSt' st m es Source #

Composer

expandIo :: forall m (es :: Set Type) (es' :: Set Type) i o. (Applicative m, ExpandableHandle es es') => HandleIo' i o m es -> (i -> m o) -> HandleIo' i o m es' Source #

beforeIo :: forall m (es :: Set Type) (es' :: Set Type) i x o. (Monad m, ExpandableHandle es (es :+: es'), ExpandableHandle es' (es :+: es')) => HandleIo' i x m es -> (i -> m x) -> HandleIo' x o m es' -> (x -> m o) -> HandleIo' i o m (es :+: es') Source #

mergeIo :: forall m (es :: Set Type) (es' :: Set Type) i x o. (Monad m, ExpandableHandle es (es :+: es'), ExpandableHandle es' (es :+: es'), MergeableOccurred es es' (es :+: es')) => HandleIo' i x m es -> (i -> m x) -> HandleIo' x o m es' -> (x -> m o) -> HandleIo' i o m (es :+: es') Source #