ndmitchell/hlint

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

Open

#1 601 ouverte le 29 mai 2024

Voir sur GitHub
 (1 commentaire) (0 réactions) (0 assignés)Haskell (208 forks)batch import
good first issue

Métriques du dépôt

Stars
 (1 594 stars)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

Description

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)

Guide contributeur