我试图让我了解Haskell函数定义。我接受了foldl函数,其定义是

:t foldl
foldl :: (a -> b -> a) -> a -> [b] -> a

现在,第一个参数是一个函数,所以如果我传递它,则剩下的是:
:t foldl (+)
foldl (+) :: Num b => b -> [b] -> b

我将其读为“接受数字值并返回接受数组的函数的函数”。

现在,第一个参数确实是一个函数吗?可以读成
foldl :: a -> b -> a -> a -> [b] -> a

反而?

我尝试只传递一个数值,这就是我得到的:
foldl 4 :: Num (a -> b -> a) => a -> [b] -> a

问题是..你怎么读的?我不明白我所拥有的。

最佳答案

第一个参数是一个函数,因此无法将其读取为:foldl :: a -> b -> a -> a -> [b] -> a。因为->是正确的关联,这意味着a -> b -> ca -> (b -> c),与(a -> b) -> c不同

关于haskell - 如何阅读 “Num (a -> b -> a) => a -> [b] -> a”定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19221414/

10-11 17:42