我写了这个函数:
为什么输出结果是
compose [] = id
compose (x:xs) = x . (compose xs)
当我询问类型时:
:t compose
compose :: [b -> b] -> b -> b
为什么输出结果是
compose :: [b -> b] -> b -> b
而不是 compose :: [a -> a] -> a -> a
,即使在字母表中 a 比 b 先?请注意以下另一个示例:badImplementationOfCompose [] = id
badImplementationOfCompose (x:xs) = (badImplementationOfCompose xs)
:t badImplementationOfCompose
badImplementationOfCompose :: [a1] -> a2 -> a2
它可能会给出一些提示...
b
来自于.
的类型,或者至少这是我的猜测。明显执行的顺序统一选择了它,而不是其他的名称。 - chi