Использование RandomGen в newsynth - PullRequest
1 голос
/ 01 мая 2020

Я новичок в Haskell и пытаюсь настроить и запустить некоторый код в довольно сжатые сроки, поэтому я делаю что-то более сложное, чем абсолютные основы. Я использую пакет newsynth и хотел бы использовать функцию root_of_negative_one ( документация , источник ). В 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

, чтобы попытаться получить квадрат root из -1 mod 5. GHCi возвращает:

<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, чтобы выполнить это. Любая помощь приветствуется. Спасибо!

1 Ответ

1 голос
/ 01 мая 2020

root_of_negative_one требуется StdGen, но getStdGen - это IO StdGen. Вам нужно сделать g <- getStdGen вместо let g = getStdGen.

...