-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Composable objects -- @package objective @version 1.0.4 module Control.Object.Object -- | The type Object f g represents objects which can handle -- messages f, perform actions in the environment g. It -- can be thought of as an automaton that transforms effects. -- Objects can be composed just like functions using -- @>>@; the identity element is echo. Objects are -- morphisms of the category of actions. -- --
-- stateful t s = t ^>>@ variable s --stateful :: Monad m => (forall a. t a -> StateT s m a) -> s -> Object t m -- | Flipped stateful. it is convenient to use with the LambdaCase -- extension. (@~) :: Monad m => s -> (forall a. t a -> StateT s m a) -> Object t m -- | A mutable variable. -- --
-- variable = stateful id --variable :: Monad m => s -> Object (StateT s m) m -- | An infix alias for runObject (@-) :: Object f g -> f x -> g (x, Object f g) -- | Cascading iterObject :: Monad m => Object f m -> Free f a -> m (a, Object f m) -- | Objects can consume free monads iterative :: Monad m => Object f m -> Object (Free f) m -- | Pass zero or more messages to an object. cascadeObject :: Monad m => Object t m -> Skeleton t a -> m (a, Object t m) -- | Add capability to handle multiple messages at once. cascading :: Monad m => Object t m -> Object (Skeleton t) m -- | Send a message to objects through a traversal. announcesOf :: (Monad m, Monoid r) => ((Object t m -> WriterT r m (Object t m)) -> s -> WriterT r m s) -> t a -> (a -> r) -> StateT s m r -- | Send a message to objects in a traversable container. -- --
-- announce = withBuilder . announcesOf traverse --announce :: (Traversable t, Monad m) => f a -> StateT (t (Object f m)) m [a] withBuilder :: Functor f => ((a -> Endo [a]) -> f (Endo [a])) -> f [a] instance [safe] Typeable Object instance [safe] HProfunctor Object module Control.Object.Mortal -- | A Mortal is an object that may die. A mortal yields a final -- result upon death. Mortal f g forms a Monad: -- return is a dead object and (>>=) prolongs the -- life of the left object. -- --
-- Object f g ≡ Mortal f g Void --newtype Mortal f g a Mortal :: Object f (EitherT a g) -> Mortal f g a unMortal :: Mortal f g a -> Object f (EitherT a g) -- | Construct a mortal in a Object construction manner. mortal :: Monad m => (forall x. f x -> EitherT a m (x, Mortal f m a)) -> Mortal f m a -- | Restricted Mortal constuctor which can be applied to -- transit, fromFoldable without ambiguousness. mortal_ :: Object f (EitherT () g) -> Mortal f g () -- | Send a message to a mortal. runMortal :: Monad m => Mortal f m a -> f x -> EitherT a m (x, Mortal f m a) -- | Turn an object into a mortal without death. immortal :: Monad m => Object f m -> Mortal f m x -- | Send a message to mortals through a filter. apprisesOf :: (Monad m, Monoid r) => ((Mortal f m b -> WriterT r m (Maybe (Mortal f m b))) -> s -> WriterT r m s) -> f a -> (a -> r) -> (b -> r) -> StateT s m r -- | Send a message to mortals in a Witherable container. -- --
-- apprises = apprisesOf wither --apprises :: (Witherable t, Monad m, Applicative m, Monoid r) => f a -> (a -> r) -> (b -> r) -> StateT (t (Mortal f m b)) m r -- | Send a message to mortals in a container. apprise :: (Witherable t, Monad m, Applicative m) => f a -> StateT (t (Mortal f m r)) m ([a], [r]) instance MonadTrans (Mortal f) instance Monad m => Monad (Mortal f m) instance (Functor m, Monad m) => Applicative (Mortal f m) instance (Functor m, Monad m) => Functor (Mortal f m) module Control.Object.Instance -- | TMVar-based instance data Instance f g InstRef :: (forall x. e x -> f x) -> (forall x. g x -> h x) -> TMVar (Object f g) -> Instance e h -- | Create a new instance. This can be used inside -- unsafePerformIO to create top-level instances. new :: MonadIO m => Object f g -> m (Instance f g) -- | Create a new instance, having it sitting on the current environment. newSettle :: MonadIO m => Object f m -> m (Instance f m) -- | Create a new instance. newSTM :: MonadSTM m => Object f g -> m (Instance f g) -- | Invoke a method with an explicit landing function. invokeOn :: (MonadIO m, MonadMask m) => (forall x. g x -> m x) -> Instance f g -> f a -> m a -- | Invoke a method with an explicit landing function. invokeOnSTM :: (forall x. g x -> STM x) -> Instance f g -> f a -> STM a -- | Invoke a method. (.-) :: (MonadIO m, MonadMask m) => Instance f m -> f a -> m a -- | Invoke a method, atomically. (..-) :: MonadSTM m => Instance f STM -> f a -> m a -- | Take a snapshot of an instance. snapshot :: (MonadSTM m, Functor g) => Instance f g -> m (Object f g) instance [safe] HProfunctor Instance module Data.Functor.Request -- | Request a b is the type of a request that sends -- a to receive b. data Request a b r Request :: a -> (b -> r) -> Request a b r -- | Apply a function to the body of Request mapRequest :: (a -> a') -> Request a b r -> Request a' b r -- | Create a Request. request :: a -> Request a b b -- | Handle a Request, smashing the continuation. accept :: Functor m => (a -> m b) -> Request a b r -> m r -- | Add a step as a mealy machine mealy :: Functor m => (a -> m (b, Object (Request a b) m)) -> Object (Request a b) m -- | The flyweight object flyweight :: (Applicative m, Eq k, Hashable k) => (k -> m a) -> Object (Request k a) m -- | Compose mealy machines (>~~>) :: Monad m => Object (Request a b) m -> Object (Request b c) m -> Object (Request a c) m accumulator :: Applicative m => (b -> a -> b) -> b -> Object (Request a b) m -- | Create a mealy machine from a time-varying action. -- --
-- animate f ≡ accumulator (+) 0 >~~> liftO (accept f) --animate :: (Applicative m, Num t) => (t -> m a) -> Object (Request t a) m -- | Like animate, but the life is limited. transit :: (Alternative m, Fractional t, Ord t) => t -> (t -> m a) -> Object (Request t a) m instance [safe] Typeable Request instance [safe] Functor (Request a b) instance [safe] Monoid a => Applicative (Request a b) instance [safe] Profunctor (Request a) module Control.Object