haskell - 导出 ((.) foldr) 的类型

标签 haskell types unification

我正在尝试手动导出 ((.) foldr) 的类型

(.) ::(b1 -> c1) -> (a1 -> b1) -> a1 -> c1
foldr :: (a2 -> b2 -> b2) -> b2 -> [a2] -> b2

然后:

b1 = a2 -> b2 -> b2
c1 = b2 -> [a2] -> b2

匹配我得到的类型:

((a2 -> b2 -> b2) -> (b2 -> [a2] -> b2)) -> (a1 -> (a2 -> b2 -> b2)) -> a1 -> (b2 -> [a2] -> b2)

但后来我对如何减少这种表达感到困惑。

有什么帮助吗?

谢谢,
塞巴斯蒂安。

最佳答案

您正确地计算出了 (.) foldr(.) 的类型。 (.) 应用于一个参数(foldr),因此您可以丢弃 ((a2 -> b2 -> b2) -> (b2 -> [a2] -> b2)) 剩下的就是 (.) foldr 的类型:

(a1 -> a2 -> b2 -> b2) -> a1 -> (b2 -> [a2] -> b2)

确保 foldr 可以在你之前输入 ((a2 -> b2 -> b2) -> (b2 -> [a2] -> b2))把它扔掉。如果匹配正确,此检查不会失败,但它是一个很好的完整性检查。

关于haskell - 导出 ((.) foldr) 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23415155/

相关文章:

java - 常见做法是什么?类型放置

pointers - 如何获取指向被屏蔽为接口(interface)的变量的指针?

Javascript变量类型(字节)

haskell - 手动推导 `zipWith . uncurry`的类型

algorithm - 与 STO 检测的统一

haskell - 支持原生递归

haskell - 功能图

haskell - 为什么aeson-native安装失败?

list - 如何将 Haskell 中的数字列表转换为范围列表?

types - 要统一的类型变量出现在类型中