| module | |
| /-! | |
| `builtin_initialize` and `initialize` in a `module` without `private`/`public` should work, even | |
| when the type references a non-public declaration. | |
| -/ | |
| structure MyState where | |
| value : Nat := 0 | |
| deriving Inhabited | |
| builtin_initialize myState : IO.Ref MyState ← IO.mkRef {} | |
| initialize myState' : IO.Ref MyState ← IO.mkRef {} | |
| builtin_initialize | |
| myState.modify fun s => { s with value := s.value + 1 } | |
| -- Exercise match auxiliary generation inside `initialize` (reproducer for Batteries issue) | |
| initialize myRef : IO.Ref Nat ← do | |
| let x : Nat ⊕ Nat := .inl 42 | |
| let v := match x with | |
| | .inl n => n | |
| | .inr n => n + 1 | |
| IO.mkRef v | |
| initialize | |
| myRef.modify (· + 1) |