【发布时间】:2014-06-18 12:43:32
【问题描述】:
我正在尝试手动导出 (foldr (.)) 的类型
foldr :: (a1 -> b1 -> b1) -> b1 -> [a1] -> b1
(.) ::(b2 -> c2) -> (a2 -> b2) -> a2 -> c2
然后:
a1 ~ (b2 -> c2)
b1 ~ (a2 -> b2)
b1 ~ a2
所以我明白了(foldr (.)) :: (a2 -> b2) -> [(b2 -> c2)] -> (a2 -> b2)
但 GHCi 返回::t (foldr (.)) :: (a -> b) -> [b -> b] -> a -> b
为什么b2和c2是一样的?
谢谢,
塞巴斯蒂安。
【问题讨论】:
-
您意识到您与
b1 ~ (a2 -> b2)∧b1 ~ a2矛盾吗? (实际上这并不是真正的矛盾,但它会是 Haskell 中没有的“无限类型”。) -
@leftaroundabout 但是如果我向 GHCi 查询 (foldr (.)) 的类型,我会得到 (a -> b) -> [b -> b] -> a -> b。跨度>
标签: haskell types ghci unification