multiply = proc [T: type] (a, b: T) returns (T) signals (overflow, underflow) where T has mul: proctype (T, T) returns (T) signals (overflow, underflow) return(a * b) resignal overflow, underflow end multiply