nat-optics 1.0.0.4 → 1.0.1.0
raw patch · 3 files changed
+19/−18 lines, 3 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
+ NatOptics.Positive.Math: absoluteDifference :: (Num n, Ord n) => Positive n -> Positive n -> NonNegative n
Files
- nat-optics.cabal +1/−1
- src/NatOptics/Positive/Math.hs +14/−14
- test/Main.hs +4/−3
nat-optics.cabal view
@@ -1,7 +1,7 @@ cabal-version: 3.0 name: nat-optics-version: 1.0.0.4+version: 1.0.1.0 category: Numeric, Optics synopsis:
src/NatOptics/Positive/Math.hs view
@@ -4,30 +4,30 @@ ( minus, plus,+ absoluteDifference, ) where -import Data.Maybe ( Maybe (..) )-import Data.Ord ( Ord, (<) )-import Optics.Core ( preview, review )-import Prelude ( Num, abs, (+), (-) )+import Data.Ord ( Ord, (<), compare, Ordering (..) )+import Prelude ( Num, (+), (-) ) import NatOptics.Positive.Unsafe ( Positive (..) )-import qualified NatOptics.Positive as Positive import NatOptics.Signed ( Signed ) import qualified NatOptics.Signed as Signed +import NatOptics.NonNegative.Unsafe ( NonNegative (..) )+ plus :: Num n => Positive n -> Positive n -> Positive n plus (PositiveUnsafe a) (PositiveUnsafe b) = PositiveUnsafe (a + b) minus :: (Num n, Ord n) => Positive n -> Positive n -> Signed n-minus a b =- let- a' = review Positive.refine a- b' = review Positive.refine b- diff = a' - b'- in- case preview Positive.refine (abs diff) of- Nothing -> Signed.Zero- Just diff' -> if diff < 0 then Signed.Minus diff' else Signed.Plus diff'+minus (PositiveUnsafe a) (PositiveUnsafe b) =+ case compare a b of+ EQ -> Signed.Zero+ GT -> Signed.Plus (PositiveUnsafe (a - b))+ LT -> Signed.Minus (PositiveUnsafe (b - a))++absoluteDifference :: (Num n, Ord n) => Positive n -> Positive n -> NonNegative n+absoluteDifference (PositiveUnsafe a) (PositiveUnsafe b) =+ NonNegativeUnsafe (if a < b then b - a else a - b)
test/Main.hs view
@@ -5,6 +5,7 @@ import Data.Int (Int16, Int32) import Data.Maybe (isNothing)+import Numeric.Natural (Natural) import Optics.Core (preview, review, view) import qualified NatOptics.Positive as Pos@@ -75,6 +76,6 @@ describe "plus" $ do specify "10 + 5" $ Pos.Math.plus (Pos.PositiveUnsafe 10) (Pos.PositiveUnsafe 5) `shouldBe` Pos.PositiveUnsafe @Int32 15 describe "minus" $ do- specify "3 - 3" $ Pos.Math.minus (Pos.PositiveUnsafe 3) (Pos.PositiveUnsafe 3) `shouldBe` S.Zero @Int32- specify "3 - 5" $ Pos.Math.minus (Pos.PositiveUnsafe 3) (Pos.PositiveUnsafe 5) `shouldBe` S.Minus @Int32 (Pos.PositiveUnsafe 2)- specify "9 - 5" $ Pos.Math.minus (Pos.PositiveUnsafe 9) (Pos.PositiveUnsafe 5) `shouldBe` S.Plus @Int32 (Pos.PositiveUnsafe 4)+ specify "3 - 3" $ Pos.Math.minus (Pos.PositiveUnsafe 3) (Pos.PositiveUnsafe 3) `shouldBe` S.Zero @Natural+ specify "3 - 5" $ Pos.Math.minus (Pos.PositiveUnsafe 3) (Pos.PositiveUnsafe 5) `shouldBe` S.Minus @Natural (Pos.PositiveUnsafe 2)+ specify "9 - 5" $ Pos.Math.minus (Pos.PositiveUnsafe 9) (Pos.PositiveUnsafe 5) `shouldBe` S.Plus @Natural (Pos.PositiveUnsafe 4)