在 newsynth 中使用 RandomGen

Using RandomGen in newsynth

我是 Haskell 的新手,我正在尝试编写一些代码并 运行 时间紧迫,这就是为什么我要做的事情比绝对基础。我正在使用包 newsynth 并想使用函数 root_of_negative_one (documentation, source)。在 GHCi 中,我 运行 以下命令:

Prelude> import Quantum.Synthesis.Diophantine
Prelude Quantum.Synthesis.Diophantine> :set -package random
Prelude Quantum.Synthesis.Diophantine> import System.Random
Prelude Quantum.Synthesis.Diophantine System.Random> let g = getStdGen
Prelude Quantum.Synthesis.Diophantine System.Random> let x = root_of_negative_one g 5

尝试求 -1 的平方根 mod 5. GHCi returns:

<interactive>:7:9: error:
    • No instance for (RandomGen (IO StdGen))
        arising from a use of ‘root_of_negative_one’
    • In the expression: root_of_negative_one g 5
      In an equation for ‘x’: x = root_of_negative_one g 5

我知道 root_of_negative_one 需要一个 RandomGen 类型的输入,但我似乎对 RandomGen 文档的理解还不够好,无法执行此操作。任何帮助表示赞赏。谢谢!

root_of_negative_one 需要一个 StdGen,但 getStdGen 是一个 IO StdGen。你需要做 g <- getStdGen 而不是 let g = getStdGen.