创建特定类型的Haskell对象(包:newsynth)
基本的哈斯克尔问题。我试图使用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
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“|λ>”
这些都很好,谢谢大家!