-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Composable objects -- -- Composable objects @package objective @version 1.1.1 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 super 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. cascading is more preferred. 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 data Fallible t a Fallible :: t a -> Fallible t (Maybe a) filteredO :: Monad m => (forall x. t x -> Bool) -> Object t m -> Object (Fallible t) m filterO :: (forall x. t x -> Bool) -> Object (Fallible t) (Skeleton t) -- | Send a message to an object through a lens. invokesOf :: Monad m => ((Object t m -> WriterT r m (Object t m)) -> s -> WriterT r m s) -> t a -> (a -> r) -> StateT s m r invokes :: (Traversable t, Monad m, Monoid r) => f a -> (a -> r) -> StateT (t (Object f m)) m r -- | A method invocation operator on StateT. (@!=) :: Monad m => ((Object t m -> WriterT a m (Object t m)) -> s -> WriterT a m s) -> t a -> StateT s m a -- | Send a message to objects in a traversable container. -- --
-- announce = withBuilder . invokesOf 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] 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 => FilterLike' (WriterT r m) s (Mortal f m b) -> 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 (GHC.Base.Functor m, GHC.Base.Monad m) => GHC.Base.Functor (Control.Object.Mortal.Mortal f m) instance (GHC.Base.Functor m, GHC.Base.Monad m) => GHC.Base.Applicative (Control.Object.Mortal.Mortal f m) instance GHC.Base.Monad m => GHC.Base.Monad (Control.Object.Mortal.Mortal f m) instance Control.Monad.Trans.Class.MonadTrans (Control.Object.Mortal.Mortal f) module Control.Object.Instance type Instance f g = MVar (Object f g) -- | 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) invokeOnUsing :: (MonadIO m, MonadMask m) => (Object f g -> t a -> g (a, Object f g)) -> (forall x. g x -> m x) -> MVar (Object f g) -> t a -> m a -- | Invoke a method with an explicit landing function. In case of -- exception, the original object will be set. invokeOn :: (MonadIO m, MonadMask m) => (forall x. g x -> m x) -> MVar (Object f g) -> f a -> m a -- | Invoke a method. (.-) :: (MonadIO m, MonadMask m) => MVar (Object f m) -> f a -> m a (..-) :: (MonadIO m, MonadMask m) => MVar (Object t m) -> Skeleton t a -> m a -- | Try to invoke a method. If the instance is unavailable, it returns -- Nothing. (?-) :: (MonadIO m, MonadMask m) => MVar (Object f m) -> f a -> m (Maybe a) 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 GHC.Base.Functor (Data.Functor.Request.Request a b) instance Data.Profunctor.Unsafe.Profunctor (Data.Functor.Request.Request a) instance GHC.Base.Monoid a => GHC.Base.Applicative (Data.Functor.Request.Request a b) module Control.Object