-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Composable objects -- -- Composable objects @package objective @version 1.2 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 infix 1 @~ -- | 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) infixr 3 @- -- | 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 (ExceptT a g) -> Mortal f g a [unMortal] :: Mortal f g a -> Object f (ExceptT a g) -- | Construct a mortal in a Object construction manner. mortal :: Monad m => (forall x. f x -> ExceptT 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 (ExceptT () g) -> Mortal f g () -- | Send a message to a mortal. runMortal :: Monad m => Mortal f m a -> f x -> ExceptT a m (x, Mortal f m a) -- | Turn an object into a mortal without death. immortal :: (Functor m, Monad m) => Object f m -> Mortal f m x -- | Send a message to mortals through a filter. apprisesOf :: Monad m => WitherLike' (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) -> Instance 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) -> Instance f g -> f a -> m a -- | Invoke a method. (.-) :: (MonadIO m, MonadMask m) => Instance f m -> f a -> m a infixr 3 .- (..-) :: (MonadIO m, MonadMask m) => Instance t m -> Skeleton t a -> m a infixr 3 ..- -- | Try to invoke a method. If the instance is unavailable, it returns -- Nothing. (?-) :: (MonadIO m, MonadMask m) => Instance f m -> f a -> m (Maybe a) module Control.Object