diff options
Diffstat (limited to 'Haskell-book/23/RandomExample/src/RandomExample.hs')
| -rw-r--r-- | Haskell-book/23/RandomExample/src/RandomExample.hs | 31 |
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) |
