1package Rational_Arithmetic is
2  -- Whole numbers
3  type Whole is new Integer;
4--
5  -- Undefine unwanted operations
6  function "/" (Left, Right: Whole) return Whole is abstract;
7--
8  -- Rational numbers
9--
10  type Rational is private;
11--
12  -- Constructors
13--
14  function "/" (Left, Right: Whole) return Rational;
15--
16  -- Rational operations
17--
18  function "-" (Left, Right: Rational) return Rational;
19--
20  -- Mixed operations
21--
22  function "+" (Left: Whole   ; Right: Rational) return Rational;
23  function "-" (Left: Whole   ; Right: Rational) return Rational;
24  function "-" (Left: Rational; Right: Whole   ) return Rational;
25  function "/" (Left: Whole   ; Right: Rational) return Rational;
26  function "*" (Left: Whole   ; Right: Rational) return Rational;
27  function "*" (Left: Rational; Right: Whole   ) return Rational;
28--
29  -- Relational
30--
31  function "=" (Left: Rational; Right: Whole) return Boolean;
32--
33private
34  type Rational is record
35    Numerator, Denominator: Whole;
36  end record;
37end Rational_Arithmetic;
38