Nea*_*roo 6 haskell type-deduction
例如:
map (+1) 2
Run Code Online (Sandbox Code Playgroud)
GHCI 收益率
<interactive>:23:1: error:
* Non type-variable argument in the constraint: Num [b]
(Use FlexibleContexts to permit this)
* When checking the inferred type
it :: forall b. (Num b, Num [b]) => [b]
Run Code Online (Sandbox Code Playgroud)
我见过很多与我类似的问题,但所有问题似乎都只是回答我们可以从中推断出的内容(第二个参数的类型是map错误的),以及如何修复它 - 但不是错误的实际含义。到底哪里出了问题?
2有类型Num a => a;我们没有指定什么a 是,只是它必须有一个Num实例。
map (+1)有类型Num b => [b] -> [b];我们已经指定了它b是什么,但它必须有一个Num实例。
当我们确定了类型之后map (+1) 2,我们基本上就统一了Num a ~ Num b => [b]。
2 :: Num a => a
map (+1) :: Num b => [b] -> [b]
map (+1) 2 :: (Num b, Num [b]) => [b]
Run Code Online (Sandbox Code Playgroud)
这就是问题所在。需要像or 这样Num的类型变量,而不是像 那样的多态类型作为其参数。ab[b]
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |