gpt4 book ai didi

haskell - 需要一个类型,但 ‘Num a’ 的类型为 ‘GHC.Prim.Constraint’

转载 作者:行者123 更新时间:2023-12-02 16:33:22 25 4
gpt4 key购买 nike

我试图采用列表形式的多项式表示(例如 [3, 2, 1] 是 3x^2 + 2x + 1)并通过对多项式和 x 的数字执行 apply 来评估它。多项式将针对 x 进行计算。

这是我的代码:

newtype Poly a = P [a]

apply :: Num a => Poly a -> Num a -> Num a
apply (P p) x = if (i > 0) then (x * ((head p) ^ i)) + (apply (P (tail p)) x) else p
where i = length p

问题是当我尝试编译此代码时,我收到一个我不明白的错误:

Expected a type, but ‘Num a’ has kind ‘GHC.Prim.Constraint’
In the type signature for ‘apply’:
apply :: Num a => Poly a -> Num a -> Num a

最佳答案

当你写的时候

apply :: Num a => Poly a -> Num a -> Num a

Num a 的第一个实例是一个约束,这意味着类型 a 必须符合 Num 类型类。不过,一旦指定了该约束一次,就无需再次指定。您遇到的问题是,您在该行上多次使用约束Num a,而您应该只使用类型 一个。要解决您的问题,请将 apply 的类型更改为以下内容:

apply :: Num a => Poly a -> a -> a

通俗地说,类型签名中 ::=> 之间的内容是约束,而 => 右侧的内容> 需要是类型。 (请注意,某些类型签名不包含任何约束,在这种情况下,它们也不会包含 => 分隔符。)

关于haskell - 需要一个类型,但 ‘Num a’ 的类型为 ‘GHC.Prim.Constraint’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38441204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com