gpt4 book ai didi

Haskell 函数签名和 "Could not deduce"编译器错误

转载 作者:行者123 更新时间:2023-12-04 06:30:37 26 4
gpt4 key购买 nike

我正在写一个 Haskell 库,它使用 Data.Vector的。库函数写成功了,不知道怎么加签名。下面是一个说明问题的简单示例:

将合格的 Data.Vector.Generic 导入为 V

-- 压缩两个向量并以元组形式返回第一个元素
测试::(V.Vector v a, Fractional a) => v a -> v a -> (a, a)
测试 a b = (V.zip a b) V.! 0

此代码导致以下编译错误:

无法推断 (V.Vector v (a, a))
从上下文(V.Vector v a,分数a)
由于在 MyLib.hs:7:12-20 中使用了“V.zip”
可能的修复:
将 (V.Vector v (a, a)) 添加到上下文中
“test”的类型签名
或为 (V.Vector v (a, a)) 添加实例声明
在`(V.!)'的第一个参数中,即`(V.zip a b)'
在表达式中: (V.zip a b) V.! 0
在`test'的定义中:test a b = (V.zip a b) V.! 0

如果我注释掉test 的签名,则代码得到遵守。功能。这里什么是正确的签名?

我正在使用 GHC 6.12.3,矢量库 0.7.0.1。

谢谢。

最佳答案

ghci 说:

Prelude Data.Vector.Generic> :t \a b -> (Data.Vector.Generic.zip a b) Data.Vector.Generic.! 0
\a b -> (Data.Vector.Generic.zip a b) Data.Vector.Generic.! 0
:: (Vector v a, Vector v b, Vector v (a, b)) =>
v a -> v b -> (a, b)

与您的情况相符,签名应为
test :: (V.Vector v a, Fractional a, V.Vector v (a, a)) => v a -> v a -> (a, a)

(哦,你需要灵活的上下文)

关于Haskell 函数签名和 "Could not deduce"编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5456443/

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