LambdaHack-0.2.8: A roguelike game engine in early and active development

Safe HaskellNone




Representation of probabilities and random computations.


The Rng monad

type Rnd a = State StdGen aSource

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 aSource

Get a random object within a range with a uniform distribution.

random :: Random a => Rnd aSource

Get a random object of a given type with a uniform distribution.

oneOf :: [a] -> Rnd aSource

Get any element of a list with equal probability.

frequency :: Show a => Frequency a -> Rnd aSource

Gen an element according to a frequency distribution.

roll :: Int -> Rnd IntSource

Roll a single die.

Rolling dice

data RollDice Source

Dice: 1d7, 3d3, 1d0, etc. RollDice a b represents a rolls of b-sided die.


RollDice Word8 Word8 

rollDice :: RollDice -> Rnd IntSource

Roll dice and sum the results.

maxDice :: RollDice -> IntSource

Maximal value of dice.

minDice :: RollDice -> IntSource

Minimal value of dice.

meanDice :: RollDice -> RationalSource

Mean value of dice.

Rolling 2D coordinates

data RollDiceXY Source

Dice for rolling a pair of integer parameters pertaining to, respectively, the X and Y cartesian 2D coordinates.


RollDiceXY (RollDice, RollDice) 


rollDiceXY :: RollDiceXY -> Rnd (Int, Int)Source

Roll the two sets of dice.

Rolling dependent on depth

type RollDeep = (RollDice, RollDice)Source

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.

rollDeep :: Int -> Int -> RollDeep -> Rnd IntSource

Roll dice scaled with current level depth. Note that at the first level, the scaled dice are always ignored.

chanceDeep :: Int -> Int -> RollDeep -> Rnd BoolSource

Roll dice scaled with current level depth and return True if the results if greater than 50.

intToDeep :: Int -> RollDeepSource

Generate a RollDeep that always gives a constant integer.

maxDeep :: RollDeep -> IntSource

Maximal value of scaled dice.

Fractional chance

type Chance = RationalSource

Fractional chance.

chance :: Chance -> Rnd BoolSource

Give True, with probability determined by the fraction.

Run using the IO RNG

rndToIO :: Rnd a -> IO aSource