ndmitchell/hlint

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

Open

#1.601 aberto em 29 de mai. de 2024

Ver no GitHub
 (1 comment) (0 reactions) (0 assignees)Haskell (208 forks)batch import
good first issue

Métricas do repositório

Stars
 (1.594 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

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)

Guia do colaborador