package Prot6 is generic type TD is private; type TI is synchronized interface; package Set_Get is type T is synchronized interface and TI; procedure Set (E : in out T; D : TD) is abstract; function Get (E : T) return TD is abstract; end Set_Get; type My_Type_Interface is synchronized interface; package Set_Get_Integer is new Set_Get (TD => Integer, TI => My_Type_Interface); use Set_Get_Integer; protected type My_Type is new Set_Get_Integer.T with overriding procedure Set (D : Integer); overriding function Get return Integer; private I : Integer; end My_Type; procedure Dummy; end Prot6;