on bd2fa8d help sign in
37 lines 1.1 kB history raw
1module Main
3import Effects
4import Effect.Random
5import Effect.Exception
6import Effect.StdIO
8data MyErr = NotANumber | OutOfRange
10parseNumber : Int -> String -> { [EXCEPTION MyErr] } Eff Int
11parseNumber num str
12 = if all isDigit (unpack str)
13 then let x = cast str in
14 if (x >=0 && x <= num)
15 then pure x
16 else raise OutOfRange
17 else raise NotANumber
19guess : Int -> { [STDIO] } Eff ()
20guess target
21 = do putStr "Guess: "
22 case run {m=Maybe} (parseNumber 100 (trim !getStr)) of
23 Nothing => do putStrLn "Invalid input"
24 guess target
25 Just v => case compare v target of
26 LT => do putStrLn "Too low"
27 guess target
28 EQ => putStrLn "You win!"
29 GT => do putStrLn "Too high"
30 guess target
32game : { [RND, STDIO] } Eff ()
33game = do srand 123456789
34 guess (fromInteger !(rndInt 0 100))
36main : IO ()
37main = run game