-- Code from page 231 demonstrating overloading of 
-- arithmetic for overlapping types in Ada
-- Kenneth C. Louden, Programming Languages
-- Principles and Practice 2nd Edition
-- Copyright (C) Brooks-Cole/ITP, 2003

with Text_IO; use Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;

procedure overload is

type Digit_Type is range 0..9;

function "+"(x,y:Digit_Type) return Digit_Type is
a: integer := integer(x);
b: integer := integer(y);
begin
  return Digit_Type((a+b) mod 10);
end "+";

a: Digit_Type := 5+7;

begin
  put(integer(a)); new_line;
  put(5+7); new_line;
end overload;
