Haskell 派生(foldr(.)的类型

Haskell 派生(foldr(.)的类型,haskell,types,ghci,unification,Haskell,Types,Ghci,Unification,我正在尝试手动派生(foldr(.)的类型 然后: 所以我得到了(foldr(.):(a2->b2)->[(b2->c2)]->(a2->b2) 但是GHCi返回::t(foldr()::(a->b)->[b->b]->a->b 为什么b2和c2是相同的 谢谢, Sebastián.如果您将(.)的类型看作 (b2 -> c2) -> (a2 -> b2) -> (a2 -> c2) 然后 所以(b2~c2) 然后您可以看到(foldr(.)的类型是 (a2 -&

我正在尝试手动派生(foldr(.)的类型

然后:

所以我得到了
(foldr(.):(a2->b2)->[(b2->c2)]->(a2->b2)

但是GHCi返回:
:t(foldr()::(a->b)->[b->b]->a->b

为什么b2和c2是相同的

谢谢,

Sebastián.

如果您将
(.)的类型看作

(b2 -> c2) -> (a2 -> b2) -> (a2 -> c2)
然后

所以
(b2~c2)

然后您可以看到
(foldr(.)
的类型是

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

这是GHC派生的类型。

如果您将
(.)的类型看作

(b2 -> c2) -> (a2 -> b2) -> (a2 -> c2)
然后

所以
(b2~c2)

然后您可以看到
(foldr(.)
的类型是

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

这就是GHC衍生的类型。

你意识到你与
b1~(a2->b2)
∧ <代码>b1~a2
?(实际上这不是矛盾,但它是哈斯凯尔所没有的“无限类型”)@leftaroundabout但如果我查询GHCi的类型(foldr(.),我得到(a->b)->[b->b]->a->b。你意识到你在用
b1~(a2->b2)
∧ <代码>b1~a2
?(事实上这并不矛盾,但这是一个“无限类型”,在Haskell中是不可能的。)@leftaroundabout但如果我查询GHCi的类型(foldr(.),我会得到(a->b)->[b->b]->a->b。
(a2 -> b2) -> [(b2 -> b2)] -> (a2 -> b2)