gpt4 book ai didi

haskell - 在简单情况下解密 Haskell 类型错误消息

转载 作者:行者123 更新时间:2023-12-02 12:06:43 24 4
gpt4 key购买 nike

此错误消息中的 [t0] -> a0 -> [a1] 代表什么?我刚刚意识到我必须将 (:) 应用于 foldr。为什么编译器没有提示 (*2) 需要某种 * 作为参数?

Prelude> foldr (:) . (* 2) [] [1..10]

<interactive>:141:19:
Couldn't match expected type `[t0] -> a0 -> [a1]'
with actual type `[a2]'
In the first argument of `* 2', namely `[]'
In the second argument of `(.)', namely `(* 2) [] [1 .. 10]'
In the expression: foldr (:) . (* 2) [] [1 .. 10]

最佳答案

所以foldr的类型是

 foldr :: (a -> b -> b) -> b -> [a] -> b

所以你传递它(:)所以它的类型变成

 foldr (:) :: [a] -> [a] -> [a]

但是,您随后尝试使用 (*2) [] [1..10] 组合它。这甚至没有很好地打字,所以你有麻烦了。我认为你的问题是函数应用程序的优先级最高。

  foldr ((:) . (*2)) [] [1..10]

显式括号是必要的。

顺便说一句,你可以使用

 map (*2) [1..10]

关于haskell - 在简单情况下解密 Haskell 类型错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302777/

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