创建特定类型的Haskell对象(包:newsynth)

创建特定类型的Haskell对象(包:newsynth),haskell,instantiation,Haskell,Instantiation,基本的哈斯克尔问题。我试图使用newsynth运行欧几里德算法,在高斯整数环中实现为euclid\u gcd。以下是我在GHCi中尝试的内容: Prelude> import Quantum.Synthesis.EuclideanDomain Prelude Quantum.Synthesis.EuclideanDomain> import Quantum.Synthesis.Ring Prelude Quantum.Synthesis.EuclideanDomain Quantum

基本的哈斯克尔问题。我试图使用newsynth运行欧几里德算法,在高斯整数环中实现为
euclid\u gcd
。以下是我在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
:12:1:错误:
•非类型变量参数
在约束中:欧几里德域(Cplx a)
(使用flexibleContext允许此操作)
•检查推断类型时
对所有a。(欧几里德和奥曼(Cplx a),数值a)=>Cplx a
因此,我尝试了
Prelude Quantum.Synthesis.EuclideanDomain Quantum.Synthesis.Ring>:set FlexibleContexts
,但返回了
一些未识别的标志:FlexibleContexts
。我认为我需要以某种方式创建特定于
ZComplex
的元素,但除了在
Z
中使用组件的复数之外,我不知道如何才能做到这一点。非常感谢您提供有关如何做到这一点的任何指导

我也非常感谢您的指导,更一般地说,关于如何解释上面链接的文档,以及如何使用它来实例化特定类型/类的元素(我可能没有正确使用这些词,如果是的话,很抱歉)


谢谢

它是ghci中的
:set-XFlexibleContexts
。不是最容易发现的东西…您可以将ghci命令放入启动时运行的
.ghci
文件中。我们可以看到,您的代码逐渐推到行的右侧,因此长的包名看不见。为了解决这个问题,对${HOME}/.ghci文件的常见添加有:
:set prompt“λ>”
:set prompt cont“|λ>”
这些都很好,谢谢大家!它是ghci中的
:set-XFlexibleContexts
。不是最容易发现的东西…您可以将ghci命令放入启动时运行的
.ghci
文件中。我们可以看到,您的代码逐渐推到行的右侧,因此长的包名看不见。为了解决这个问题,对${HOME}/.ghci文件的常见添加有:
:set prompt“λ>”
:set prompt cont“|λ>”
这些都很好,谢谢大家!