一个函数是多态的,如果它适用于几种不同的类型 - 因此,如果一个函数仅用于单态 >一种。 (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)
多态函数也是吗?
答案 0 :(得分:2)
你可以通过GHCi问问Haskell本身:
=$A:$T
如您所见,它完全由参数化多态类型(Prelude> :t foldr
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
,a
和b
定义,其中t
为{{1} })。
答案 1 :(得分:1)
一般来说,fold
是一种允许遍历不同集合元素的模式。在foldr
的情况下,它适用于任何类型的列表:
foldr :: (a -> b -> b) -> b -> [a] -> b
所以从这个意义上说,它是一个多态函数。