User Tools

Site Tools


codesnippets:randomvalues

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
codesnippets:randomvalues [2021/04/30 20:36] – created f2b216codesnippets:randomvalues [2025/10/08 00:48] (current) – external edit 127.0.0.1
Line 2: Line 2:
  
   * example   * example
 +    * code, module Main:<code Haskell>
 +{-# 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>
     * code, module Randomisable:<code Haskell>     * code, module Randomisable:<code Haskell>
 {-# LANGUAGE FlexibleInstances, ScopedTypeVariables #-} {-# LANGUAGE FlexibleInstances, ScopedTypeVariables #-}
Line 203: Line 252:
             (prng1, prng2, prng3, prng4, prng5, prng6, prng7, prng8, prng9)             (prng1, prng2, prng3, prng4, prng5, prng6, prng7, prng8, prng9)
 </code> </code>
-    * codemodule Main:<code Haskell+    * executeswith output like:<code> 
-{-# OPTIONS_GHC -fno-warn-orphans #-} +(MyData 1547211741 2147483396 0.2483644234579585 0.9836217202419262 (MyData2 0.4909809627910673 0.8713231916723704),MyData 1547251755 2147402014 0.2483644234579585 0.9836217202419262 (MyData2 0.4909809627910673 0.8713231916723704),MyData2 0.6269406052566662 0.2513090689294605,ScaleA 0.11255263338660004
- +</code>
-import qualified Randomisable as Rnd +
- +
-main :: IO (+
-main = do +
-  prng0 <- Rnd.newStdGen +
-  print $ processMyData ((Rnd.random prng0) :: MyData) +
-  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> 
  
 +===== ✎ =====
 +~~DISCUSSION~~
codesnippets/randomvalues.1619807817.txt.gz · Last modified: (external edit)

Except where otherwise noted, content on this wiki is licensed under the following license: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki