繁体   English   中英

haskell中的foldr地图是什么类型的?

[英]What is the type of foldr map in haskell?

我试图找出折叠地图的类型,以及你应该如何解决这样的问题。

我知道个别类型是什么:

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

我知道各个函数是如何工作的,但找出类型是我似乎无法解决的问题。

foldr会将一个函数作为第一个参数,这将是整个映射的权利吗?

我欢迎所有提示,我是Haskell的新手,并试图学习这些谜题。

作为成分,我们有foldrmap 为避免混淆,让我们将mapab重命名为cd ,因为这些(可能)是不同的类型。 所以我们把功能看作:

foldr :: (a -> b -> b) -> b -> [a] -> b
map   :: (c -> d) -> [c] -> [d]

或者更详细:

foldr :: (a -> (b -> b)) -> (b -> ([a] -> b))
map   :: (c -> d) -> ([c] -> [d])

由于map是具有foldr作为函数的函数应用程序的参数,这意味着map的类型应该与foldr参数类型相同,因此:

  a        -> (b   -> b)
~ (c -> d) -> ([c] -> [d])
----------------------------------
a ~ (c -> d), b ~ [c] ~ [d], c ~ d

因此我们推导出ac -> d类型相同,并且b[c][d]类型相同。 因此我们也知道c ~ dcd类型相同)。

foldr map的类型是foldr函数的返回类型,但是专门用于我们派生的相等关系,因此:

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

所以我们用c -> c替换a ,用[c]替换b ,因此类型:

foldr map :: [c] -> ([c -> c] -> [c])

或者是一种不那么冗长的形式:

foldr map :: [c] -> [c -> c] -> [c]

注意foldr的签名已经推广到foldr :: Foldable f => (a -> b -> b) -> b -> fa -> b ,但派生类型是类似的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM