runRandom, runRandomStd, runRandomNewStd,
mrandomR, mrandom,
withProb,
- filterRandomized
+ filterRandomized,
+ indRandomArray
) where
import System.Random
+import Data.Array.IArray
+import Data.Ix
-- Needs -XRank2Types
newtype Randomized a = Randomized (forall g. RandomGen g => (g -> a))
filterRandomized f ra = do
a <- ra
if f a then return a else filterRandomized f ra
+
+-- Randomized array with elements chosen independently following a given
+-- randomized element.
+indRandomArray :: (IArray a e, Ix i) =>
+ (i, i) -> Randomized e -> Randomized (a i e)
+indRandomArray bds rElement = do
+ list <- sequence $ replicate (rangeSize bds) rElement
+ return (listArray bds list)