On Thu, 17 Mar 2011, wren ng thornton wrote:

(1) If the result would drop below zero then throw an overflow error;

(2) Use saturating subtraction, i.e. if the result would drop below zero then return zero;

(3) Use type hackery to disallow performing subtraction when the result would drop below zero, e.g. by requiring a proof that the left argument is not less than the right.

My practical experiences with the non-negative package are: I started with a saturation subtraction as in (2), but it turned out, that I hardly need that definition in further code. Thus I switched to

(4) Use a symmetric subtraction that returns the minimum, the order and the absolute difference of both operands. Precise definitions and reasons in 'split' function:

http://hackage.haskell.org/packages/archive/non-negative/0.1/doc/html/Numeric-NonNegative-Class.html


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to