Safe Haskell | None |
---|
Representation of probabilities and random computations.
- type Rnd a = State StdGen a
- randomR :: Random a => (a, a) -> Rnd a
- random :: Random a => Rnd a
- oneOf :: [a] -> Rnd a
- frequency :: Show a => Frequency a -> Rnd a
- cast :: Int -> Rnd Int
- data RollDice
- rollDice :: Int -> Int -> RollDice
- castDice :: RollDice -> Rnd Int
- maxDice :: RollDice -> Int
- minDice :: RollDice -> Int
- meanDice :: RollDice -> Rational
- data RollDiceXY = RollDiceXY !(RollDice, RollDice)
- castDiceXY :: RollDiceXY -> Rnd (Int, Int)
- type RollDeep = (RollDice, RollDice)
- castDeep :: Int -> Int -> RollDeep -> Rnd Int
- chanceDeep :: Int -> Int -> RollDeep -> Rnd Bool
- intToDeep :: Int -> RollDeep
- maxDeep :: RollDeep -> Int
- type Chance = Rational
- chance :: Chance -> Rnd Bool
- rndToIO :: Rnd a -> IO a
The Rng
monad
type Rnd a = State StdGen a
The monad of computations with random generator state. The lazy state monad is OK here: the state is small and regularly forced.
Random operations
randomR :: Random a => (a, a) -> Rnd a
Get a random object within a range with a uniform distribution.
Casting dice
data RollDice
Dice: 1d7, 3d3, 1d0, etc.
RollDice a b
represents a
rolls of b
-sided die.
Casting 2D coordinates
data RollDiceXY
Dice for rolling a pair of integer parameters pertaining to, respectively, the X and Y cartesian 2D coordinates.
castDiceXY :: RollDiceXY -> Rnd (Int, Int)
Cast the two sets of dice.
Casting dependent on depth
type RollDeep = (RollDice, RollDice)
Dice for parameters scaled with current level depth. To the result of rolling the first set of dice we add the second, scaled in proportion to current depth divided by maximal dungeon depth.
castDeep :: Int -> Int -> RollDeep -> Rnd Int
Cast dice scaled with current level depth. Note that at the first level, the scaled dice are always ignored.
chanceDeep :: Int -> Int -> RollDeep -> Rnd Bool
Cast dice scaled with current level depth and return True
if the results if greater than 50.