29 lines
716 B
Haskell
Executable file
29 lines
716 B
Haskell
Executable file
#!/usr/bin/env stack
|
|
{- stack script
|
|
--resolver lts-11.6
|
|
--install-ghc
|
|
--package protolude
|
|
-}
|
|
{-# LANGUAGE NoImplicitPrelude #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
import Protolude
|
|
|
|
guess :: IO ()
|
|
guess = guessBetween 0 120
|
|
|
|
guessBetween :: Integer -> Integer -> IO ()
|
|
guessBetween minAge maxAge = do
|
|
let age = (maxAge + minAge) `div` 2
|
|
if minAge == maxAge
|
|
then putText ("You are " <> show minAge)
|
|
else do
|
|
putText ("Are you younger than " <> show age <> "?")
|
|
answer <- getLine
|
|
case answer of
|
|
"y" -> guessBetween minAge (age - 1)
|
|
_ -> guessBetween (if age == minAge then age + 1 else age) maxAge
|
|
|
|
main :: IO ()
|
|
main = do
|
|
guess
|
|
putText "Thanks for playing!"
|