Created
January 27, 2016 23:55
-
-
Save loloof64/4022e7806e2e918b1253 to your computer and use it in GitHub Desktop.
The "less or more" guessing game in haskell (Simple haskell training)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Main where | |
import System.Random | |
import Text.Read (readMaybe) | |
main::IO() | |
main = do | |
limit <- getPositiveInteger "Give me the secret number limit :" | |
gen <- newStdGen | |
let secretNumber = chooseSecretNumber gen limit | |
letUserGuessValue secretNumber | |
getPositiveInteger::String->IO Int | |
getPositiveInteger message = do | |
putStrLn message | |
valueStr <- getLine | |
let valueMaybe = readMaybe valueStr | |
case valueMaybe of | |
Nothing -> do | |
putStrLn "The value must be a positive integer !" | |
getPositiveInteger message | |
Just value -> | |
if value > 0 then | |
return value | |
else | |
do | |
putStrLn "The value must be positive !" | |
getPositiveInteger message | |
letUserGuessValue::Int->IO () | |
letUserGuessValue secretNumber = do | |
purposedValue <- getPositiveInteger "Can you guess my secret number ?" | |
checkUserPurposedValue secretNumber purposedValue | |
checkUserPurposedValue::Int->Int->IO () | |
checkUserPurposedValue secretNumber userPurpose | |
| userPurpose < secretNumber = consumeUserTry "It is more !" secretNumber | |
| userPurpose > secretNumber = consumeUserTry "It is less !" secretNumber | |
| otherwise = putStrLn "You got it !!!" | |
consumeUserTry::String->Int->IO() | |
consumeUserTry message secretNumber = do | |
putStrLn message | |
letUserGuessValue secretNumber | |
chooseSecretNumber::StdGen-> Int-> Int | |
chooseSecretNumber gen maxValue = let (value, _) = randomR (1, maxValue) gen | |
in value |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment