The Haskell 2010 В разделе 20.10.1.1 Language Report говорится, что:
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)
.
Есть ли для этого веская причина?
Я спрашиваю, что, если для этого нет веской причины, я бы включил deleteBy
с более общим типом в ] Frege порт Data.List я сейчас делаю. Но, может быть, я что-то упускаю?
РЕДАКТИРОВАТЬ: Как заметил @hammar, это также относится и к другим xxx По функциям.