| -- | |
| structure Payload := | |
| (key : Nat) | |
| (val : Nat) | |
| @[noinline] def get? (p : Payload) (k : Nat) : Option Nat := | |
| if p.key == k then pure p.val else failure | |
| inductive T | |
| | a (i : Nat) | |
| | b (i : Nat) | |
| | c (i : Nat) | |
| | d (i : Nat) | |
| @[noinline] def foo (p : Payload) : Option T := | |
| (do | |
| let i ← get? p 1; | |
| pure (T.a i)) | |
| <|> (do | |
| let i ← get? p 2; | |
| pure (T.b i)) | |
| <|> (do | |
| let i ← get? p 3; | |
| pure (T.c i)) | |
| <|> (do | |
| let i ← get? p 4; | |
| let i ← get? p 5; | |
| pure (T.d i)) | |
| def wrongOutput : String := | |
| match foo (Payload.mk 1 20) with | |
| | some (t : T) => | |
| match t with | |
| | T.a i => "1: " ++ toString i | |
| | T.b i => "2: " ++ toString i | |
| | T.c i => "3: " ++ toString i | |
| | T.d i => "4: " ++ toString i | |
| | none => "5" | |
| /-- info: "1: 20" -/ | |
| #guard_msgs in | |
| #eval wrongOutput | |
| def main (xs : List String) : IO Unit := | |
| IO.println wrongOutput |