ndmitchell/hlint

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

開放

#1,601 建立於 2024年5月29日

 (1 則留言) (0 個反應) (0 位負責人)Haskell (208 個分叉)batch import
good first issue

倉庫指標

星標
 (1,602 顆星)
PR 合併指標
 (30 天內沒有已合併 PR)

描述

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)

貢獻者指南