【发布时间】:2010-12-21 15:10:40
【问题描述】:
我对 Haskell 在 where 定义中的作用域有疑问。当我有以下函数f,我想将x 传递给本地定义的函数f1 而不明确地将其用作参数时,我收到一个错误,指出x 的类型与f1 的输出中的那个,虽然应该是一样的:
错误如下:
无法将预期类型“a1”与推断类型“a”匹配 `a1' 是一个刚性类型变量,由 test.hs:4:11 中“f1”的类型签名 `a' 是一个刚性类型变量,由 `f' 在 test.hs:1:8 的类型签名 在表达式中:x 在表达式中:[x, y] 在 `f1' 的定义中: f1 y = [x, y] 失败,加载模块:无。但是,当我将 x 作为附加参数传递时,就像我在下面的代码中使用函数 g 所做的那样,它可以正常工作:
有没有办法让f 中的a 类型与f1 中的a(或a1)类型兼容?
【问题讨论】:
-
虽然用大量的类型签名给你的代码加糖是非常好的做法,除了极其微不足道的部分,我看不出用它们加糖本地范围函数的原因。类型签名是什么很明显,对于像这样的微不足道的函数,你失去的可读性比你得到的要多。
-
嗯,实际的功能比较复杂,我只是把它简化为一个简单的例子,这样我的实际问题就会变得清晰。
标签: haskell types scope type-mismatch