我在 GHCi 中编写了一个快速的单行代码,并尝试用 map 组合总和。我认为它失败的原因是因为 map 给出了一般类型 [b] 的输出,而 sum 接受特定输入 Num a => [a]。但是,假设 map 函数的输出类型为 Num b => [b],则这段代码没有任何问题。
我认为编写限制类型声明可能有效(尽管我猜这会阻止您在 GHCi 中这样做),但它仍然没有:
myFunc :: Num b => (a -> b) -> [a] -> b
myFunc = sum . map
给了我以下错误:
Couldn't match expected type `[[a] -> b]'
with actual type `[a] -> [b]'
Expected type: (a -> b) -> [[a] -> b]
Actual type: (a -> b) -> [a] -> [b]
In the second argument of `(.)', namely `map'
In the expression: sum . map
有没有办法做到这一点?也许我只是错过了一些明显的东西(Haskell 的新手)。