about summary refs log tree commit diff
path: root/pkgs/development/haskell-modules/patches/misfortune-ghc9.patch
blob: 39f983b15d78eedc28016d78248e258fea048307 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
diff --git a/misfortune.cabal b/misfortune.cabal
index f5d0dd3..faa5794 100644
--- a/misfortune.cabal
+++ b/misfortune.cabal
@@ -113,7 +113,8 @@ Library
                         directory,
                         filepath,
                         knob,
-                        random-fu >= 0.2.2,
+                        random,
+                        random-fu >= 0.3,
                         semigroups,
                         text,
                         utf8-string,
diff --git a/src/Data/Fortune.hs b/src/Data/Fortune.hs
index 16d221e..ffbc970 100644
--- a/src/Data/Fortune.hs
+++ b/src/Data/Fortune.hs
@@ -64,6 +64,7 @@ import Paths_misfortune
 import System.Directory
 import System.Environment
 import System.FilePath
+import System.Random.Stateful (newIOGenM, newStdGen)
 
 -- |The number of fortune strings in the index
 numFortunes :: S.FortuneStats -> Int
@@ -233,9 +234,10 @@ randomFortune paths = withFortuneFiles '%' False paths $ \fs -> do
 -- random fortune from that file (unformly).
 randomFortuneFromRandomFile :: RVar FortuneFile -> IO String
 randomFortuneFromRandomFile file = do
-    f <- sample file
+    gen <- newStdGen >>= newIOGenM
+    f <- sampleFrom gen file
     n <- getNumFortunes f
-    i <- sample (uniform 0 (n-1))
+    i <- sampleFrom gen (uniform 0 (n-1))
     T.unpack <$> getFortune f i
 
 -- |Given a list of 'FortuneFile's, compute a distrubution over them weighted by the number
diff --git a/src/Fortune.hs b/src/Fortune.hs
index 5a27578..d6ffb74 100644
--- a/src/Fortune.hs
+++ b/src/Fortune.hs
@@ -21,6 +21,7 @@ import System.Environment
 import System.Exit
 import System.FilePath
 import System.IO
+import System.Random.Stateful (newIOGenM, newStdGen)
 import Text.Printf
 import Text.Regex.Base
 import Text.Regex.PCRE
@@ -200,6 +201,7 @@ main = do
     fortunes <- filterM (filterFile args) (fortuneFiles args)
     
     dist <- getDist args fortunes
+    gen <- newStdGen >>= newIOGenM
     
     when (numEvents dist == 0) $ do
         hPutStrLn stderr "No fortunes matched the filter criteria"
@@ -225,8 +227,8 @@ main = do
             , let pctStr = printf "(%.2f%%)" (100 * weight / totalWeight dist) :: String
             ]
         else do
-            (file, fortuneDist) <- sample dist
-            fortune <- sample fortuneDist
+            (file, fortuneDist) <- sampleFrom gen dist
+            fortune <- sampleFrom gen fortuneDist
             putStrLn . T.unpack =<< getFortune file fortune
 
 getDist :: Args -> [FortuneFile] -> IO (Categorical Float (FortuneFile, Categorical Float Int))