Skip to content

Commit

Permalink
Update GuessNumber
Browse files Browse the repository at this point in the history
  • Loading branch information
edwinb committed Jan 20, 2016
1 parent f5b45e7 commit ba6cfe0
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions GuessNumber/guessnumber.idr
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ data Result = TooLow | Correct | TooHigh

data GuessNumber : Effect where
GuessNum : Int ->
{ GameInfo (Running (S k)) ==>
{guess} GameInfo (case guess of
sig GuessNumber Result
(GameInfo (Running (S k)))
(\guess =>
GameInfo (case guess of
Correct => NotRunning
_ => Running k) } GuessNumber Result
Quit : { GameInfo (Running Z) ==> GameInfo NotRunning } GuessNumber Int
_ => Running k))
Quit : sig GuessNumber Int (GameInfo (Running Z)) (GameInfo NotRunning)

GUESS : GameState -> EFFECT
GUESS t = MkEff (GameInfo t) GuessNumber
Expand All @@ -32,10 +34,10 @@ guess : Int -> { [GUESS (Running (S k))] ==>
_ => Running k)] } Eff Result
guess n = call $ GuessNum n

quit : { [GUESS (Running Z)] ==> [GUESS NotRunning] } Eff Int
quit : Eff Int [GUESS (Running Z)] [GUESS NotRunning]
quit = call Quit

instance Handler GuessNumber m where
Handler GuessNumber m where
handle (Number g n) (GuessNum i) k with (compare i n)
handle (Number (S g) n) (GuessNum i) k | LT = k TooLow (Number g n)
handle (Number Z n) (GuessNum i) k | LT = k TooLow (Lost n)
Expand All @@ -44,8 +46,7 @@ instance Handler GuessNumber m where
handle (Number (S g) n) (GuessNum i) k | GT = k TooHigh (Number g n)
handle (Lost n) Quit k = k n Init

game : { [GUESS (Running n), STDIO] ==>
[GUESS NotRunning, STDIO] } Eff ()
game : Eff () [GUESS (Running n), STDIO] [GUESS NotRunning, STDIO]
game {n=Z} = do putStrLn "You lose"
ans <- quit
putStrLn $ "The answer was " ++ show ans
Expand Down

0 comments on commit ba6cfe0

Please sign in to comment.