Есть ли веская причина, по которой у `deleteBy` нет своего наиболее общего типа?

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 По функциям.

18
задан Ingo 25 January 2012 в 15:21
поделиться