【发布时间】:2014-05-02 20:07:35
【问题描述】:
我正在尝试导出 (.) (foldr(++)) (map (:)) 的类型
我首先导出foldr (++)的类型
foldr :: (a1 -> b1 -> b1) -> b1 -> [a1] -> b1
(++) :: [a2] -> [a2] -> [a2]
a1 ~ [a2]
b1 ~ [a2]
b1 ~ [a2]
所以
foldr (++) :: [a2] -> [[a2]] -> [a2] ~ [a] -> [[a]] -> [a]
然后我推导出map (:)的类型
map :: (a1 -> b1) -> [a1] -> [b1]
(:) :: a2 -> [a2] -> [a2]
a1 ~ a2
b1 ~ [a2] -> [a2]
所以
map (:) :: [a2] -> [[a2] -> [a2]] ~ [a] -> [[a] -> [a]]
终于(.) (foldr(++)) (map (:))的类型
(.) :: (b1 -> c1) -> (a1 -> b1) -> a1 -> c1
map (:) :: [a2] -> [[a2] -> [a2]]
foldr (++) :: [a3] -> [[a3]] -> [a3]
b1 ~ [a2]
c1 ~ [[a2] -> [a2]]
a1 ~ [a3]
b1 ~ [[a3]] -> [a3]
所以我明白了
(.) (foldr(++)) (map (:)) :: a1 -> c1 ~ [a3] -> [[a2] -> [a2]]
但如果我向 GHCi 询问 :t (.) (foldr(++)) (map (:)) 我会得到 (.) (foldr(++)) (map (:)) :: [a] -> [[[a] -> [a]]] -> [[a] -> [a]]
这与我的结果不同,有什么帮助可以得出相同的结果吗?
谢谢,
塞巴斯蒂安。
【问题讨论】:
标签: haskell types ghci unification