Skip to content

Commit

Permalink
coroutine-object: make coroutine-object example buildable!
Browse files Browse the repository at this point in the history
  • Loading branch information
wavewave committed Feb 5, 2016
1 parent 99b383f commit 954dac2
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 18 deletions.
27 changes: 12 additions & 15 deletions coroutine-object/example/SampleActor.hs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{-# LANGUAGE GADTs, NoMonomorphismRestriction, ScopedTypeVariables #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE ScopedTypeVariables #-}

----------------------------
-- | describe world object
Expand Down Expand Up @@ -110,18 +112,11 @@ data SubOp i o where
giveEventSub :: (Monad m) => Event -> CObjT SubOp m ()
giveEventSub ev = request (Arg GiveEventSub ev) >> return ()

{-
getState l = lift ( liftM ( getL (l.worldState) ) get )
putState l x = lift ( put . ( setL (l.worldState) x ) =<< get )
modState l m = lift ( put . modL (l.worldState) m =<< get )
-}

-- | air object
air :: (Monad m) => SObjT SubOp (StateT (WorldAttrib m) m) ()
air :: forall m. (Monad m) => SObjT SubOp (StateT (WorldAttrib m) m) ()
air = ReaderT airW
where airW (Arg GiveEventSub ev) = do
where airW :: Arg SubOp -> CrtnT (Res SubOp) (Arg SubOp) (StateT (WorldAttrib m) m) ()
airW (Arg GiveEventSub ev) = do
r <- case ev of
Sound s -> do
modify ( worldState.tempLog %~ (. (++ "sound " ++ s ++"\n")))
Expand All @@ -141,9 +136,10 @@ air = ReaderT airW


-- | door object
door :: (Monad m) => SObjT SubOp (StateT (WorldAttrib m) m) ()
door :: forall m. (Monad m) => SObjT SubOp (StateT (WorldAttrib m) m) ()
door = ReaderT doorW
where doorW (Arg GiveEventSub ev) = do
where doorW :: Arg SubOp -> CrtnT (Res SubOp) (Arg SubOp) (StateT (WorldAttrib m) m) ()
doorW (Arg GiveEventSub ev) = do
r <- case ev of
Open -> do
b <- (^. worldState.isDoorOpen) <$> get
Expand All @@ -168,9 +164,10 @@ door = ReaderT doorW
doorW req

-- |
messageBoard :: Monad m => SObjT SubOp (StateT (WorldAttrib m) m) ()
messageBoard :: forall m. Monad m => SObjT SubOp (StateT (WorldAttrib m) m) ()
messageBoard = ReaderT msgbdW
where msgbdW (Arg GiveEventSub ev) = do
where msgbdW :: Arg SubOp -> CrtnT (Res SubOp) (Arg SubOp) (StateT (WorldAttrib m) m) ()
msgbdW (Arg GiveEventSub ev) = do
r <- case ev of
Message msg -> do modify (worldState.message .~ msg)
return True
Expand Down
8 changes: 5 additions & 3 deletions coroutine-object/example/Simple.hs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Simple where

import Control.Monad.Reader
-- from this package
--
import Control.Monad.Trans.Crtn
import Control.Monad.Trans.Crtn.Logger
import Control.Monad.Trans.Crtn.Object
Expand All @@ -14,9 +15,10 @@ simplelogger :: (MonadLog m) => LogServer m ()
simplelogger = loggerW 0

-- |
loggerW :: (MonadLog m) => Int -> LogServer m ()
loggerW :: forall m. (MonadLog m) => Int -> LogServer m ()
loggerW num = ReaderT (f num)
where f n req =
where f :: Int -> LogInput -> CrtnT (Res LogOp) (Arg LogOp) m ()
f n req =
case req of
Arg WriteLog msg -> do lift (scribe ("log number "++show n++" : "++ msg))
req' <- request (Res WriteLog ())
Expand Down

0 comments on commit 954dac2

Please sign in to comment.