Используйте элемент управления Haskell.Монада.Случайный.Class.fromList с System.Случайный

#haskell #random

Вопрос:

Я хочу использовать Control.Monad.Random.Class.fromList

 fromList :: MonadRandom m => [(a, Rational)] -> m a
 

https://hackage.haskell.org/package/MonadRandom-0.5.3/docs/Control-Monad-Random-Class.html#v:fromList

вместе с System.Random.mkStdGen

 mkStdGen :: Int -> StdGen
 

https://hackage.haskell.org/package/random-1.2.1/docs/System-Random.html#v:mkStdGen

Я вижу экземпляр

 (Monad m, RandomGen g) => MonadInterleave (RandT g m)
 

но я не уверен, как объединить.

Комментарии:

1. runRandT (fromList _) (mkStdGen _)

Ответ №1:

Вам нужно использовать монаду, у которой есть экземпляр MonadRandom , например RandT :

 import System.Random
import Control.Monad.Random

main :: IO ()
main = do
  let stdGen = mkStdGen 2021
  putStrLn $ fst $
    runRand (fromList [("hello", 0.5), ("world", 0.1)]) stdGen
 

Что даст:

 world