【发布时间】:2014-06-13 04:33:15
【问题描述】:
我想手动导出类型:
f1 x xs = (filter . (<)) x xs
我们第一次看到x,所以:
x :: t1
那么(<)就有这个类型:
(<) :: Ord a1 => a1 -> a1 -> Bool
如果可以统一以下类型,我们只能说(< x):
t1 ~ a1
然后
x :: a1
所以
(<x) :: Ord a1 => a1 -> Bool
过滤器有这种类型
filter :: (a2 -> Bool) -> [a2] -> [a2]
第一次见xs,所以:
xs :: t2
如果可以统一以下类型,我们只能说(filter . (<)) x xs:
a1 -> Bool ~ a2 -> Bool
t2 ~ [a2]
所以我得到了 f1 :: (a2 -> Bool) -> [a2] -> [a2],与 filter 相同的类型,而正确的类型是 Ord a => a -> [a] -> [a](询问 GHCi)。
有什么帮助吗?
【问题讨论】:
标签: haskell types ghci unification