package Discr20 is Size : Integer; type Name is new String (1..Size); type Rec is record It : Name; end record; type Danger is (This, That); type def (X : Danger := This) is record case X is when This => It : Rec; when That => null; end case; end record; type Switch is (On, Off); type Wrapper (Disc : Switch := On) is private; function Get (X : Wrapper) return Def; private type Wrapper (Disc : Switch := On) is record Case Disc is when On => It : Def; when Off => null; end case; end record; end Discr20;