Haskell 2010 语言报告在第 20.10.1.1 节中指出:
deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
事实上,GHC 库中的实现将允许
deleteBy :: (b -> a -> Bool) -> b -> [a] -> [a]
但实际上使用注释将类型限制为前一种。
因此,不能说,例如:
foo = deleteBy fsteq 42 [(43, "foo"), (44, "bar"), (42, "baz")] where
fsteq a (b,_) = a == b
因为Int
不一样(Int, String)
。
这有什么好的理由吗?
我问的原因是,如果没有充分的理由,我会在我目前正在做的 Data.List的FregedeleteBy
端口中包含更通用的类型。但也许我忽略了什么?
编辑:正如@hammar 指出的,这也适用于其他xxx By 函数。