generic
type Discrete_Type is (<>);
package Modulo_Discrete_Type is
function Succ_Mod (D : Discrete_Type) return Discrete_Type is
(if D = Discrete_Type'Last then Discrete_Type'First else Discrete_Type'Succ (D));
function Pred_Mod (D : Discrete_Type) return Discrete_Type is
(if D = Discrete_Type'First then Discrete_Type'Last else Discrete_Type'Pred (D));
end Modulo_Discrete_Type;