summaryrefslogtreecommitdiff
path: root/Haskell-book/23/RandomExample/src/RandomExample.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Haskell-book/23/RandomExample/src/RandomExample.hs')
-rw-r--r--Haskell-book/23/RandomExample/src/RandomExample.hs31
1 files changed, 31 insertions, 0 deletions
diff --git a/Haskell-book/23/RandomExample/src/RandomExample.hs b/Haskell-book/23/RandomExample/src/RandomExample.hs
new file mode 100644
index 0000000..deaa449
--- /dev/null
+++ b/Haskell-book/23/RandomExample/src/RandomExample.hs
@@ -0,0 +1,31 @@
+module RandomExample where
+
+import System.Random
+
+data Die = DieOne
+ | DieTwo
+ | DieThree
+ | DieFour
+ | DieFive
+ | DieSix
+ deriving (Eq, Show)
+
+intToDie :: Int -> Die
+intToDie n =
+ case n of
+ 1 -> DieOne
+ 2 -> DieTwo
+ 3 -> DieThree
+ 4 -> DieFour
+ 5 -> DieFive
+ 6 -> DieSix
+ -- Use 'error' __extermely_ sparingly
+ x -> error $ "intToDie got non 1-6 integer: " ++ show x
+
+rollDieThreeTimes :: (Die, Die, Die)
+rollDieThreeTimes = do
+ let s = mkStdGen 0
+ (d1, s1) = randomR (1, 6) s
+ (d2, s2) = randomR (1, 6) s1
+ (d3, _) = randomR (1, 6) s2
+ (intToDie d1, intToDie d2, intToDie d3)