Haskell 2010 Lingua Denuncia stati nella sezione 20.10.1.1 che:C'è una buona ragione per cui `deleteBy` non ha il suo tipo più generale?
deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
Infatti, l'attuazione nel GHC library permetterebbe
deleteBy :: (b -> a -> Bool) -> b -> [a] -> [a]
ma in realtà limita il tipo da quello precedente con la annotazione.
Quindi, non si può dire, per esempio:
foo = deleteBy fsteq 42 [(43, "foo"), (44, "bar"), (42, "baz")] where
fsteq a (b,_) = a == b
perché Int
non è la stessa come (Int, String)
.
C'è qualche buona ragione per questo?
La ragione per cui sto chiedendo è che, se non c'è una buona ragione, includo deleteBy
con il tipo più generale nella porta Frege di Data.List che sto facendo attualmente. Ma forse sto trascurando qualcosa?
MODIFICA: come ha sottolineato @hammar, questo vale per altri xxx Per funzioni anche.
Questo è il tipo di commenti penetranti che stavo cercando. Mi dà qualcosa a cui pensare. – Ingo
Questa è una risposta molto perspicace! – danr
Ma non si dovrebbe risolvere 42 con "Integer" secondo le regole di default del tipo? – haskelline