1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| import Text.Printf (printf)
import System.IO
(lo, hi) = (1, 100) :: (Int, Int)
prompt :: String -> IO String
prompt str = putStr str >> putChar ' ' >> hFlush stdout >> getLine
main = do
prompt $ printf "Pick a number between %d and %d [enter]" lo hi
loop lo hi
loop :: Int -> Int -> IO ()
loop lo hi
| lo == hi = putStrLn $ printf "It has to be %d" lo
| otherwise = do
let guess = (lo + hi) `div` 2
line <- prompt $ printf "Is it %d? (yes/lower/higher)" guess
case line of
"lower" -> loop lo (guess 1)
"higher" -> loop (guess + 1) hi
"yes" -> printf "Sweet!\n"
_ -> printf "wat\n" >> loop lo hi
|