packages feed

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 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)