Skip to content

Instantly share code, notes, and snippets.

@loloof64
Created January 27, 2016 23:55
Show Gist options
  • Save loloof64/4022e7806e2e918b1253 to your computer and use it in GitHub Desktop.
Save loloof64/4022e7806e2e918b1253 to your computer and use it in GitHub Desktop.
The "less or more" guessing game in haskell (Simple haskell training)
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