-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Extensible objects -- @package objective @version 0.3 module Control.Object -- | The type 'Object e m' represents objects which can handle messages -- e, perform actions in the environment m. It can be -- thought of as an automaton that converts effects. Objects can -- be composed just like functions using .>>.; the identity -- element is echo. newtype Object e m Object :: (forall x. e x -> m (x, Object e m)) -> Object e m runObject :: Object e m -> forall x. e x -> m (x, Object e m) -- | Lift a natural transformation into an object. liftO :: Functor f => (forall x. e x -> f x) -> Object e f -- | Change the workspace of the object. transObject :: Functor g => (forall x. f x -> g x) -> Object e f -> Object e g -- | Apply a function to the messages coming into the object. adaptObject :: Functor m => (forall x. e x -> f x) -> Object f m -> Object e m -- | Parrots messages given. echo :: Functor e => Object e e -- | Compose two objects (aka Dependency Injection). (.>>.) :: Functor n => Object e m -> Object m n -> Object e n -- | Build an object. oneshot :: (Functor e, Monad m) => (forall a. e (m a) -> m a) -> Object e m -- | Build a stateful object. stateful :: Monad m => (forall a. e a -> StateT s m a) -> s -> Object e m -- | Build a stateful object, sharing out the state. sharing :: Monad m => (forall a. e a -> StateT s m a) -> s -> Object (AccessT s e) m -- | Like MonadState, but doesn't require Monad as a -- prerequisite. class Stateful s f | f -> s get_ :: Stateful s f => f s put_ :: Stateful s f => s -> f () -- | Inflicts external state accessibility to arbitrary effects. data AccessT s f a Get :: (s -> a) -> AccessT s f a Put :: s -> a -> AccessT s f a LiftAccessT :: (f a) -> AccessT s f a -- | A mutable variable. variable :: Applicative f => s -> Object (Access s) f type Access s = AccessT s Zero -- | Convert a method sequence into a sequential method -- execution. sequential :: Monad m => Object e m -> Object (Free e) m instance Typeable Object instance Typeable AccessT instance Functor f => Functor (AccessT s f) instance (Functor f, Stateful s f) => Stateful s (Free f) instance Stateful s (AccessT s f) module Control.Monad.Objective.Class class Monad m => MonadObjective m where data family Address (e :: * -> *) (m :: * -> *) type family Residence (m :: * -> *) :: * -> * (.-) :: MonadObjective m => Address e m -> e a -> m a new :: MonadObjective m => Object e (Residence m) -> m (Address e m) -- | Old synonym for new. -- | Deprecated: Use new instead of misleading invoke invoke :: MonadObjective m => Object e (Residence m) -> m (Address e m) (.&) :: (MonadObjective m, Stateful s e) => Address e m -> StateT s m a -> m a -- | like sequential, but it allows ad-hoc use of Free. (.|-) :: MonadObjective m => Address e m -> Free e a -> m a instance (Monoid w, MonadObjective m) => MonadObjective (WriterT w m) instance (Monoid w, MonadObjective m) => MonadObjective (WriterT w m) instance MonadObjective m => MonadObjective (StateT s m) instance MonadObjective m => MonadObjective (StateT s m) instance MonadObjective m => MonadObjective (MaybeT m) instance MonadObjective m => MonadObjective (ListT m) instance MonadObjective m => MonadObjective (IdentityT m) instance MonadObjective m => MonadObjective (ExceptT er m) instance MonadObjective m => MonadObjective (ContT r m) instance (Monoid w, MonadObjective m) => MonadObjective (RWST r w s m) instance (Monoid w, MonadObjective m) => MonadObjective (RWST r w s m) instance MonadObjective m => MonadObjective (ReaderT r m) -- | MonadObjective IO using MVar module Control.Monad.Objective.IO instance MonadObjective IO module Control.Monad.Objective