Copyright | (c) Fumiaki Kinoshita 2014 |
---|---|
License | BSD3 |
Maintainer | Fumiaki Kinoshita <[email protected]> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | None |
Language | Haskell2010 |
Control.Object
Description
Stateful effect transducer: The Mealy machine for effects.
- newtype Object e m = Object {}
- liftO :: Functor f => (forall x. e x -> f x) -> Object e f
- echo :: Functor e => Object e e
- oneshot :: (Functor e, Monad m) => (forall a. e (m a) -> m a) -> Object e m
- stateful :: Monad m => (forall a. e a -> StateT s m a) -> s -> Object e m
- variable :: Applicative f => s -> Object (State s) f
- (.>>.) :: Functor n => Object e m -> Object m n -> Object e n
- transObject :: Functor g => (forall x. f x -> g x) -> Object e f -> Object e g
- adaptObject :: Functor m => (forall x. e x -> f x) -> Object f m -> Object e m
- sequential :: Monad m => Object e m -> Object (ReifiedProgram e) m
- runSequential :: Monad m => Object e m -> ReifiedProgram e a -> m (a, Object e m)
- loner :: Functor m => Object Nil m
- (.|>.) :: Functor m => Object f m -> Object (Union s) m -> Object (f |> Union s) m
- sharing :: Monad m => (forall a. e a -> StateT s m a) -> s -> Object (State s |> (e |> Nil)) m
- flyweight :: Monad m => Ord k => (k -> m a) -> Object (Request k a) m
- newtype Process m a b = Process {}
- _Process :: (Profunctor p, Functor f) => p (Process m a b) (f (Process m a b)) -> p (Object (Request a b) m) (f (Object (Request a b) m))
Construction
liftO :: Functor f => (forall x. e x -> f x) -> Object e f Source
Lift a natural transformation into an object.
oneshot :: (Functor e, Monad m) => (forall a. e (m a) -> m a) -> Object e m Source
Build an object using continuation passing style.
stateful :: Monad m => (forall a. e a -> StateT s m a) -> s -> Object e m Source
Build a stateful object.
variable :: Applicative f => s -> Object (State s) f Source
A mutable variable.
Composition
(.>>.) :: Functor n => Object e m -> Object m n -> Object e n infixr 4 Source
Compose two objects (aka Dependency Injection).
transObject :: Functor g => (forall x. f x -> g x) -> Object e f -> Object e g Source
Change the workspace of the object.
adaptObject :: Functor m => (forall x. e x -> f x) -> Object f m -> Object e m Source
Apply a function to the messages coming into the object.
sequential :: Monad m => Object e m -> Object (ReifiedProgram e) m Source
Let object handle sequential methods.
runSequential :: Monad m => Object e m -> ReifiedProgram e a -> m (a, Object e m) Source
Multifunctional objects
(.|>.) :: Functor m => Object f m -> Object (Union s) m -> Object (f |> Union s) m infixr 3 Source
Extend an object by adding another independent object.
sharing :: Monad m => (forall a. e a -> StateT s m a) -> s -> Object (State s |> (e |> Nil)) m Source
Build a stateful object, sharing out the state.
Patterns
An object which is specialized to be a Mealy machine
Instances
Monad m => Category * (Process m) | |
Monad m => Arrow (Process m) | |
Monad m => ArrowChoice (Process m) | |
Monad m => Strong (Process m) | |
Monad m => Choice (Process m) | |
Monad m => Profunctor (Process m) | |
Functor f => Functor (Process f a) | |
Applicative f => Applicative (Process f a) | |
(Applicative m, Fractional o) => Fractional (Process m i o) | |
(Applicative m, Num o) => Num (Process m i o) | |
(Applicative f, Monoid b) => Monoid (Process f a b) |