Haskell - 折叠多态函数?

时间:2018-01-16 17:31:48

标签: haskell

一个函数是多态的,如果它适用于几种不同的类型 - 因此,如果一个函数仅用于单态 >一种。 (wiki.haskell

例如,SET post_status='wc-pending' WHERE `post_title` LIKE '%FEB%2017%' 是多态的。

map

但是,函数(map :: (a -> b) -> [a] -> [b] )具有单态类型。它只接受foo

的列表
Int
Haskell中的

foo :: (Int -> Int) -> [Int] -> [Int] foo = map

foldr

foldr f z [] = z foldr f z (x:xs) = f x (foldr f z xs) 多态函数也是吗?

2 个答案:

答案 0 :(得分:2)

你可以通过GHCi问问Haskell本身:

=$A:$T

如您所见,它完全由参数化多态类型(Prelude> :t foldr foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b ab定义,其中t为{{1} })。

答案 1 :(得分:1)

一般来说,fold是一种允许遍历不同集合元素的模式。在foldr的情况下,它适用于任何类型的列表:

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

所以从这个意义上说,它是一个多态函数。