ndmitchell/hlint

Incorrect "Use map" when folding over a `Foldable`

Open

#1601 aperta il 29 mag 2024

Vedi su GitHub
 (1 commento) (0 reazioni) (0 assegnatari)Haskell (208 fork)batch import
good first issue

Metriche repository

Star
 (1594 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

The code

triggersUseMap :: Foldable f => f a -> [a]
triggersUseMap = foldr (\k acc -> identity k : acc) []

-- to get rid of "Avoid lambda" and "Redundant id"
identity :: a -> a
identity = id

triggers the hint

                        Warning: Use map
Found:
  foldr (\ k acc -> identity k : acc) []
Perhaps:
  map (\ k -> identity k)

but obviously triggersUseMap = map (\k -> identity k) does not compile, since map wants a list and the argument is a general Foldable.

The same warning is not emitted with the eta reduced version:

noHint :: Foldable f => f a -> [a]
noHint = foldr ((:) . identity) [] -- no hint even with foldr (:) []

This is using GHC 9.6.5 with HLint 3.6.1 (apologies if this was already fixed in 3.8, but I didn't see anything of the sort in the changelog)

Guida contributor