basi c Haskell вопрос здесь. Я пытаюсь использовать newsynth Quantum.Synthesis.EuclideanDomain для запуска евклидова алгоритма, реализованного там как euclid_gcd
, в кольце гауссовых целых чисел Z[i]
. Вот что я попробовал в GHCi:
Prelude> import Quantum.Synthesis.EuclideanDomain
Prelude Quantum.Synthesis.EuclideanDomain> import Quantum.Synthesis.Ring
Prelude Quantum.Synthesis.EuclideanDomain Quantum.Synthesis.Ring> let p = Cplx 13 0
Prelude Quantum.Synthesis.EuclideanDomain Quantum.Synthesis.Ring> let z = Cplx 5 1
Prelude Quantum.Synthesis.EuclideanDomain Quantum.Synthesis.Ring> euclid_gcd z p
Вывод
<interactive>:12:1: error:
• Non type-variable argument
in the constraint: EuclideanDomain (Cplx a)
(Use FlexibleContexts to permit this)
• When checking the inferred type
it :: forall a. (EuclideanDomain (Cplx a), Num a) => Cplx a
, поэтому я попытался Prelude Quantum.Synthesis.EuclideanDomain Quantum.Synthesis.Ring> :set FlexibleContexts
, но это вернуло Some flags have not been recognized: FlexibleContexts
. Я думаю, что мне нужно как-то создать элементы, специфицирующие c до ZComplex
, но я не уверен, как это сделать, кроме сложных чисел с компонентами в Z
. Любое руководство о том, как это сделать, очень ценится.
Я также был бы благодарен за руководство, в более общем смысле, как интерпретировать документацию, такую как ссылка, приведенную выше, и как использовать ее для создания экземпляров элементов определенных типов / классов (возможно, я не использовал их слова правильно, извиняюсь если так).
Спасибо!