import Control.Talk import Control.Monad.Tools main :: IO () main = do doWhile ( runTalkMonad ( tkApply Wakeup ) initialTalker ) $ \ret -> case ret of ( GivemeEventbind, tk ) -> return ( runTalkMonad ( do tkApply $ SetContainer NoAnswer 0 tkApply $ SupplyEventbind GivemeEvent eb ) tk, True ) ( GivemeEvent, tk ) -> do cmd <- getLine return ( runTalkMonad ( tkApply $ Event cmd ) tk, True ) ( ContainerIs msg val, tk ) -> do print val return ( runTalkMonad ( tkApply msg ) tk, True ) ( ans, tk ) -> return ( ( ans, tk ), False ) return () eb, ab, testb :: Message String Int -> TalkM ( Talker String Int, Answer String Int ) () eb ( Event "show" ) = tkApply $ GetContainer $ PleaseAnswer GivemeEvent eb ( Event "quit" ) = tkApply Goodnight eb ( Event "succ" ) = tkApply $ ModifyContainer GivemeEvent (+1) eb ( Event "succ3" ) = tkApply $ ModifyContainer GivemeEvent (+3) eb ( Event "succ20" ) = tkApply $ ModifyContainer GivemeEvent (+20) eb ( Event "succ25" ) = tkApply $ ModifyContainer GivemeEvent (+25) eb ( Event "add" ) = tkApply $ SupplyEventbind GivemeEvent ab eb ( Event "test" ) = tkApply $ SupplyEventbind GivemeEvent testb eb _ = delegate ab ( Event n ) = do tkApply $ ModifyContainer GivemeEvent (+ read n) tkApply $ Unbind GivemeEvent ab _ = delegate -- testb ( Event "succ" ) = delegate >> tkApply ( ModifyContainer GivemeEvent (+1) ) -- testb ( Event "succ" ) = tkApply ( ModifyContainer GivemeEvent (+1) ) >> delegate -- testb ( Event "succ" ) = testb ( Event "succ3" ) = tkApply ( Event "succ25" ) >> delegate >> -- tkApply ( ModifyContainer GivemeEvent (+1) ) >> delegate >> -- tkApply ( SetContainer GivemeEvent 8 ) >> delegate >> tkApply ( ModifyContainer GivemeEvent (+1) ) {- testb ( Event "add" ) = tkApply ( ModifyContainer GivemeEvent (+1) ) >> delegate >> -- tkApply ( SetContainer GivemeEvent 8 ) >> delegate >> tkApply ( ModifyContainer GivemeEvent (+1) ) -} testb _ = delegate