Skip to content
Merged
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Notable changes to this project are documented in this file. The format is based
## [Unreleased]

Breaking changes:
- Fix `signum zero` to return `zero` (#280 by @JordanMartinez)

New features:

Expand Down
8 changes: 5 additions & 3 deletions src/Data/Ord.purs
Original file line number Diff line number Diff line change
Expand Up @@ -214,10 +214,12 @@ between low hi x
abs :: forall a. Ord a => Ring a => a -> a
abs x = if x >= zero then x else negate x

-- | The sign function; always evaluates to either `one` or `negate one`. For
-- | any `x`, we should have `signum x * abs x == x`.
-- | The sign function; returns `one` if the argument is positive, `negate one` if the argument is negative, or `zero` if the argument is `zero`. For any `x`, we should have `signum x * abs x == x`.
signum :: forall a. Ord a => Ring a => a -> a
signum x = if x >= zero then one else negate one
signum x =
if x < zero then negate one
else if x > zero then one
else x

-- | The `Ord1` type class represents totally ordered type constructors.
class Eq1 f <= Ord1 f where
Expand Down