Copyright | (c) Anton Gushcha, 2015-2016 |
---|---|
License | BSD3 |
Maintainer | ncrashed@gmail.com |
Stability | experimental |
Portability | POSIX |
Safe Haskell | None |
Language | Haskell2010 |
Module that contains monadic and arrow API of actor module.
- class MonadThrow m => ActorMonad m where
- data ActorException = ActorIdConflict TypeRep Int
- actorSend :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) => i -> GameWire m (Event (ActorMessageType i)) (Event ())
- actorSendMany :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i), Foldable t) => i -> GameWire m (Event (t (ActorMessageType i))) (Event ())
- actorSendDyn :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) => GameWire m (Event (i, ActorMessageType i)) (Event ())
- actorSendManyDyn :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i), Foldable t) => GameWire m (Event (t (i, ActorMessageType i))) (Event ())
- actorProcessMessages :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) => i -> (a -> ActorMessageType i -> a) -> GameWire m a a
- actorProcessMessagesM :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) => i -> (a -> ActorMessageType i -> GameMonadT m a) -> GameWire m a a
- actorMessages :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) => i -> (ActorMessageType i -> Bool) -> GameWire m a (Event (Seq (ActorMessageType i)))
- makeActor :: (ActorMonad m, ActorMessage i) => (i -> GameWire m a b) -> GameActor m i a b
- makeFixedActor :: (ActorMonad m, ActorMessage i) => i -> GameWire m a b -> GameActor m i a b
- runActor :: ActorMonad m => GameActor m i a b -> GameWire m a (b, i)
- runActor' :: ActorMonad m => GameActor m i a b -> GameWire m a b
- getActorFingerprint :: forall i. ActorMessage i => i -> HashableTypeRep
Documentation
class MonadThrow m => ActorMonad m where Source #
Low level monadic API for module.
actorRegisterM, actorRegisterFixedM, actorDeleteM, actorRegisteredM, actorSendM, actorGetMessagesM, findActorTypeRepM, registerActorTypeRepM
actorRegisterM :: ActorMessage i => m i Source #
Registers new actor in message system
actorRegisterFixedM :: ActorMessage i => i -> m () Source #
Registers specific id, throws ActorException if there is id clash
actorDeleteM :: ActorMessage i => i -> m () Source #
Deletes actor with given id
actorRegisteredM :: ActorMessage i => i -> m Bool Source #
Checks if given id is already taken
actorSendM :: (ActorMessage i, Typeable (ActorMessageType i)) => i -> ActorMessageType i -> m () Source #
Sends typed message to actor with given id
actorGetMessagesM :: (ActorMessage i, Typeable (ActorMessageType i)) => i -> m (Seq (ActorMessageType i)) Source #
Get all messages that were collected for given actor's id
Note: Doesn't clears the queue
findActorTypeRepM :: String -> m (Maybe HashableTypeRep) Source #
Find type representation of actor by it type name
registerActorTypeRepM :: forall proxy i. ActorMessage i => proxy i -> m () Source #
Register type representation for actor (sometimes this should be done before any actor is registered)
(MonadThrow (mt m), ActorMonad m, MonadTrans mt) => ActorMonad (mt m) Source # | |
MonadThrow m => ActorMonad (ActorT s m) Source # | |
data ActorException Source #
Exceptions thrown by ActorMonad
ActorIdConflict TypeRep Int | Tried to register already presented actor |
Message API
actorSend :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) => i -> GameWire m (Event (ActorMessageType i)) (Event ()) Source #
Sends message to statically known actor
actorSendMany :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i), Foldable t) => i -> GameWire m (Event (t (ActorMessageType i))) (Event ()) Source #
Sends many messages to statically known actor
actorSendDyn :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) => GameWire m (Event (i, ActorMessageType i)) (Event ()) Source #
Sends message to actor with incoming id
actorSendManyDyn :: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i), Foldable t) => GameWire m (Event (t (i, ActorMessageType i))) (Event ()) Source #
Sends many messages, dynamic version of actorSendMany which takes actor id as arrow input
:: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) | |
=> i | Actor id known statically |
-> (a -> ActorMessageType i -> a) | Action that modifies accumulator |
-> GameWire m a a | Wire that updates input value using supplied function |
Helper to process all messages from message queue and update a state
actorProcessMessagesM Source #
:: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) | |
=> i | Actor id known statically |
-> (a -> ActorMessageType i -> GameMonadT m a) | Monadic action that modifies accumulator |
-> GameWire m a a | Wire that updates input value using supplied function |
Helper to process all messages from message queue and update a state (monadic version)
:: (ActorMonad m, ActorMessage i, Typeable (ActorMessageType i)) | |
=> i | Actor id which messages we look for |
-> (ActorMessageType i -> Bool) | Filter function, leaves only with True return value |
-> GameWire m a (Event (Seq (ActorMessageType i))) |
Non-centric style of subscribing to messages
Actor API
:: (ActorMonad m, ActorMessage i) | |
=> (i -> GameWire m a b) | Body wire |
-> GameActor m i a b | Operation that makes actual actor |
Registers new index for wire and makes an actor wire
:: (ActorMonad m, ActorMessage i) | |
=> i | Manual id of actor |
-> GameWire m a b | Body wire |
-> GameActor m i a b | Operation that makes actual actor |
Registers new actor with fixed id, can fail with ActorException if there is already registered actor for that id
:: ActorMonad m | |
=> GameActor m i a b | Actor creator |
-> GameWire m a (b, i) | Usual wire that also returns id of inner indexed wire |
If need no dynamic switching, you can use the function to embed index wire just at time
:: ActorMonad m | |
=> GameActor m i a b | Actor creator |
-> GameWire m a b | Usual wire |
Same as runActor, but doesn't return id of actor
Helpers for libraries
getActorFingerprint :: forall i. ActorMessage i => i -> HashableTypeRep Source #
Helper to get actor fingerprint from id value