X-Git-Url: https://mattmccutchen.net/match/match.git/blobdiff_plain/fd0d2377785ca843a46b0050a7351dac82c84777..066d7f5355c79a94b6d3a6fb2008e0a506b289c7:/program/RandomizedMonad.hs diff --git a/program/RandomizedMonad.hs b/program/RandomizedMonad.hs index 37f2b98..f3b50d4 100644 --- a/program/RandomizedMonad.hs +++ b/program/RandomizedMonad.hs @@ -3,9 +3,12 @@ module RandomizedMonad ( 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)) @@ -59,3 +62,11 @@ filterRandomized :: (a -> Bool) -> Randomized a -> Randomized 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)