lean4-htt/tests/lean/doIssue.lean
Leonardo de Moura 06ad52575a feat: force users to use discard when action result is not being bound and it is not PUnit
After this commit, we have to use an explicit `discard` in code such as
```
def g (x : Nat) : IO Nat := ...
def f (x : Nat) : IO Unit := do
  discard <| g x   -- type error without the `discard`
  IO.println x
```

Motivation: prevent users from making mistakes such as
```
def f (xs : Array Nat) : IO Unit := do
  xs.set! 0 1
  IO.println xs
```
when they meant to write
```
def f (xs : Array Nat) : IO Unit := do
  let xs := xs.set! 0 1
  IO.println xs
```
2020-12-08 06:14:48 -08:00

23 lines
475 B
Text

def f (x : Nat) : IO Unit := do
x -- Error
IO.println x
def f' (x : Nat) : IO Unit := do
discard x
IO.println x
def g (xs : Array Nat) : IO Unit := do
xs.set! 0 1 -- Error
IO.println xs
def g' (xs : Array Nat) : IO Unit := do
discard <| xs.set! 0 1 -- Error
IO.println xs
def h (xs : Array Nat) : IO Unit := do
pure (xs.set! 0 1) -- Error
IO.println xs
def h' (xs : Array Nat) : IO Unit := do
discard <| pure (xs.set! 0 1) -- Error
IO.println xs