我试图让我了解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 -> c
是a -> (b -> c)
,与(a -> b) -> c
不同
关于haskell - 如何阅读 “Num (a -> b -> a) => a -> [b] -> a”定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19221414/