objective-0.0: Extensible objects

Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Object

Synopsis

Documentation

newtype Object e m Source

The type 'Object e m' represents objects which can handle messages e, perform actions in the Monad m. It can be thought of as a function where both domain and codomain are effects. Thus, it can be composed just like functions using '(.>>.)' (not often needed); the identity element is echo.

Constructors

Object 

Fields

runObject :: forall x. e x -> m (x, Object e m)
 

Instances

Typeable ((* -> *) -> (* -> *) -> *) Object 

transObject :: Monad n => (forall x. m x -> n x) -> Object e m -> Object e n Source

Change the workspace of the object.

adaptObject :: Monad m => (forall x. e x -> f x) -> Object f m -> Object e m Source

Apply a function to the messages coming into the object.

echo :: Functor e => Object e e Source

Parrots messages given.

(.>>.) :: Monad n => Object e m -> Object m n -> Object e n Source

Compose two objects (aka Dependency Injection).

oneshot :: (Functor e, Monad m) => (forall a. e (m a) -> m a) -> Object e m Source

Build an object.

stateful :: (Functor e, Monad m) => (forall a. e (StateT s m a) -> StateT s m a) -> s -> Object (AccessT s e) m Source

Build a stateful object.

class Stateful s f where Source

Like MonadState, but doesn't require Monad as a prerequisite.

Methods

get_ :: f s Source

put_ :: s -> f () Source

Instances

Stateful s (AccessT s f) 

data AccessT s f a Source

Inflicts external state accessibility to arbitrary effects.

Constructors

Get (s -> a) 
Put s a 
LiftAccessT (f a) 

Instances

Stateful s (AccessT s f) 
Functor f => Functor (AccessT s f) 
Typeable (* -> (* -> *) -> * -> *) AccessT 

variable :: Monad m => s -> Object (AccessT s Zero) m Source