Re: Richard Riehle's excellent suggestion:
>       generic
>         type Item is private;
>         with function Tic_First          return Item;
        [ with function Tic_Image (I:Item) return String; ]
>         ...
>       package Generic_Math_Ops is ...
>
>   If you do instantiate with a type for which there is a set of predefined
>   operators, the use of the default reduces the number of actual arguments.

This would be even easier if "Ada-2K" is enhanced to allow

   first, attributes to be truly equal to subprograms:

      package Mine is new Generic_Math_Ops
                          (Item      => Wierd_Type,
                           Tic_First => Wierd_Type'First,
                           ....

   second, generic formals to define defaults that don't match the
   formal names:

       generic
         type Item is private;
         with function Tic_First          return Item is Item'First;
         with function Tic_Image (I:Item) return String is Item'Image;
         ...
       package Generic_Math_Ops is ...