-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrps.hs
More file actions
31 lines (26 loc) · 790 Bytes
/
Copy pathrps.hs
File metadata and controls
31 lines (26 loc) · 790 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import System.IO
import System.Random
import Control.Arrow (first)
data Throw = Rock | Paper | Scissors
deriving (Show, Read, Enum, Bounded)
instance Random Throw where
random = randomR (minBound, maxBound)
randomR (a, b) g = first toEnum $ randomR (fromEnum a, fromEnum b) g
beats :: Throw -> Throw -> Bool
Rock `beats` Scissors = True
Paper `beats` Rock = True
Scissors `beats` Paper = True
_ `beats` _ = False
play :: Throw -> Throw -> String
play p1 p2
| p1 `beats` p2 = "You win!"
| p2 `beats` p1 = "You lose."
| otherwise = "Tie."
main :: IO ()
main = do
putStr "Enter your move [Rock, Paper, or Scissors]: "
hFlush stdout
p1 <- readLn
p2 <- randomIO
putStrLn $ show p1 ++ " vs. " ++ show p2
putStrLn $ play p1 p2