codesnippets:randomvalues
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| codesnippets:randomvalues [2021/04/30 20:36] – created f2b216 | codesnippets:randomvalues [2025/10/08 00:48] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 2: | Line 2: | ||
| * example | * example | ||
| + | * code, module Main:< | ||
| + | {-# OPTIONS_GHC -fno-warn-orphans #-} | ||
| + | |||
| + | import qualified Randomisable as Rnd | ||
| + | |||
| + | main :: IO () | ||
| + | main = do | ||
| + | prng0 <- Rnd.newStdGen | ||
| + | print $ processMyData ((Rnd.random prng0) :: MyData) | ||
| + | |||
| + | processMyData :: MyData -> (MyData, MyData, MyData2, ScaleA) | ||
| + | processMyData (MyData prng0 nd1 nd2 mydt2) = | ||
| + | let | ||
| + | (prng1, prng2, prng3, prng4, prng5) = Rnd.tplPrngSplit5 prng0 | ||
| + | in | ||
| + | ((MyData prng1 nd1 nd2 mydt2), (MyData prng2 (Rnd.randomise prng3 nd1) nd2 mydt2), ((Rnd.random prng4) :: MyData2), ((Rnd.random prng5) :: ScaleA)) | ||
| + | |||
| + | data MyData = MyData Rnd.StdGen Double Double MyData2 | ||
| + | deriving (Show, Read) | ||
| + | |||
| + | data MyData2 = MyData2 Double Double | ||
| + | deriving (Show, Read) | ||
| + | |||
| + | newtype ScaleA = ScaleA Double | ||
| + | deriving (Show, Read) | ||
| + | |||
| + | instance Rnd.Randomisable ScaleA where | ||
| + | randomS = (Rnd.randomValueS (0.0, 2.0)) >>= (\d -> return (ScaleA d)) | ||
| + | |||
| + | instance Rnd.Randomisable Double where | ||
| + | randomS = Rnd.randomValueS (0.0, 1.0) | ||
| + | randomiseS n = Rnd.randomiseValueProbablyS 0.1 (0.0, 1.0) n | ||
| + | |||
| + | instance Rnd.Randomisable MyData2 where | ||
| + | randomS = | ||
| + | do | ||
| + | r1 <- Rnd.randomS | ||
| + | r2 <- Rnd.randomS | ||
| + | return (MyData2 r1 r2) | ||
| + | |||
| + | instance Rnd.Randomisable MyData where | ||
| + | randomS = | ||
| + | do | ||
| + | prng1 <- Rnd.splitGenS | ||
| + | r1 <- Rnd.randomS | ||
| + | r2 <- Rnd.randomS | ||
| + | r3 <- Rnd.randomS | ||
| + | return (MyData prng1 r1 r2 r3) | ||
| + | </ | ||
| * code, module Randomisable:< | * code, module Randomisable:< | ||
| {-# LANGUAGE FlexibleInstances, | {-# LANGUAGE FlexibleInstances, | ||
| Line 203: | Line 252: | ||
| (prng1, prng2, prng3, prng4, prng5, prng6, prng7, prng8, prng9) | (prng1, prng2, prng3, prng4, prng5, prng6, prng7, prng8, prng9) | ||
| </ | </ | ||
| - | * code, module Main:< | + | * executes, with output like:< |
| - | {-# OPTIONS_GHC -fno-warn-orphans #-} | + | (MyData 1547211741 2147483396 0.2483644234579585 0.9836217202419262 |
| - | + | </ | |
| - | import qualified Randomisable as Rnd | + | |
| - | + | ||
| - | main :: IO () | + | |
| - | main = do | + | |
| - | prng0 <- Rnd.newStdGen | + | |
| - | print $ processMyData | + | |
| - | print $ processMyData ((Rnd.random prng0) :: MyData) | + | |
| - | + | ||
| - | processMyData :: MyData -> (MyData, MyData, MyData2, ScaleA) | + | |
| - | processMyData (MyData prng0 nd1 nd2 mydt2) = | + | |
| - | let | + | |
| - | (prng1, prng2, prng3, prng4, prng5) = Rnd.tplPrngSplit5 prng0 | + | |
| - | in | + | |
| - | | + | |
| - | + | ||
| - | data MyData = MyData Rnd.StdGen Double Double MyData2 | + | |
| - | deriving (Show, Read) | + | |
| - | data MyData2 = MyData2 Double Double | ||
| - | deriving (Show, Read) | ||
| - | |||
| - | newtype ScaleA = ScaleA Double | ||
| - | deriving (Show, Read) | ||
| - | |||
| - | instance Rnd.Randomisable ScaleA where | ||
| - | randomS = (Rnd.randomValueS (0.0, 2.0)) >>= (\d -> return (ScaleA d)) | ||
| - | |||
| - | instance Rnd.Randomisable Double where | ||
| - | randomS = Rnd.randomValueS (0.0, 1.0) | ||
| - | randomiseS n = Rnd.randomiseValueProbablyS 0.1 (0.0, 1.0) n | ||
| - | |||
| - | instance Rnd.Randomisable MyData2 where | ||
| - | randomS = | ||
| - | do | ||
| - | r1 <- Rnd.randomS | ||
| - | r2 <- Rnd.randomS | ||
| - | return (MyData2 r1 r2) | ||
| - | |||
| - | instance Rnd.Randomisable MyData where | ||
| - | randomS = | ||
| - | do | ||
| - | prng1 <- Rnd.splitGenS | ||
| - | r1 <- Rnd.randomS | ||
| - | r2 <- Rnd.randomS | ||
| - | r3 <- Rnd.randomS | ||
| - | return (MyData prng1 r1 r2 r3) | ||
| - | </ | ||
| + | ===== ✎ ===== | ||
| + | ~~DISCUSSION~~ | ||
codesnippets/randomvalues.1619807817.txt.gz · Last modified: (external edit)
