Haskell 派生(foldr(.)的类型
我正在尝试手动派生(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(.):(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)