Zulip Chat Archive
Stream: general
Topic: a linter bug
fonqL (Jun 14 2024 at 05:27):
Linter can't properly handle the for syntax with hypothesis.
def f [Monad m]: α -> m Unit
| _ => pure ()
/--
warning: unused variable `xs`
note: this linter can be disabled with `set_option linter.unusedVariables false`
-/
#guard_msgs in
def find (xs : List α) : Option α := do
for _h: x in xs do
f x
none
Jon Eugster (Jun 14 2024 at 06:46):
quick sanity check, does it also complain when you actually use x in something nontrivial? I'm not sure that f x counts as using as it is just pure ()?
fonqL (Jun 14 2024 at 06:53):
yes.
/--
warning: unused variable `xs`
note: this linter can be disabled with `set_option linter.unusedVariables false`
-/
#guard_msgs in
def find (xs : List α) (p: (a: α) -> Bool) : Option α := do
for _h: x in xs do
if p x then
return x
none
But if I use hypothesis, linter will not complain about xs. Perhaps its request is xs must be used in the "body" of for and the type of h is x ∈ xs, so it stops to complain.
def find (xs : List α) (p: (a: α) -> a ∈ xs -> Bool) : Option α := do
for h: x in xs do
if p x h then
return x
none
Jon Eugster (Jun 14 2024 at 07:14):
Ah so the key point seems to be about the h : part... :detective:
Below find1 is fine and find2 has the linter warnings on xs and h, and the only difference is the h :
def f [Monad m]: α -> m Unit
| _ => pure ()
def find1 (xs : List α) : Option α := do
for x in xs do
f x
none
-- unused variable xs and h
def find2 (xs : List α) : Option α := do
for h : x in xs do
f x
none
Last updated: May 02 2025 at 03:31 UTC