[英]Haskell - Is Fold polymorphic function?
函数是多态的 ,如果它适用于多种不同类型的 -因此,函数是单态的 ,如果它仅适用于一个类型 。 ( wiki.haskell )
例如, map
是多态的。
map :: (a -> b) -> [a] -> [b]
但是,函数( foo
)具有单态类型。 它只会接受Int
列表:
foo :: (Int -> Int) -> [Int] -> [Int]
foo = map
foldr
在Haskell:
foldr f z [] = z
foldr f z (x:xs) = f x (foldr f z xs)
Fold
多态函数也是吗?
您可以通过GHCi询问Haskell本身:
Prelude> :t foldr
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
如您所见,它完全由参数多态类型( a
, b
和t
,其中t
是Foldable
)定义。
一般来说, fold
是一种允许遍历不同集合元素的模式。 对于foldr
,它适用于任何类型的列表:
foldr :: (a -> b -> b) -> b -> [a] -> b
所以从这个意义上讲,它是一个多态函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.