rounded 0.2 → 0.3
raw patch · 3 files changed
+20/−15 lines, 3 filesdep ~basedep ~ghc-prim
Dependency ranges changed: base, ghc-prim
Files
- CHANGELOG.markdown +4/−0
- rounded.cabal +4/−4
- src/Numeric/Rounded/Simple.hs +12/−11
CHANGELOG.markdown view
@@ -1,5 +1,9 @@ # Revision history for rounded +## 0.3 -- 2020-05-19++* Fixed `simplify` with `Nat` precisions by adding kind signatures.+ ## 0.2 -- 2019-08-28 * Wrapped a lot more of the MPFR API.
rounded.cabal view
@@ -1,5 +1,5 @@ name: rounded-version: 0.2+version: 0.3 synopsis: Correctly-rounded arbitrary-precision floating-point arithmetic homepage: https://github.com/ekmett/rounded bug-reports: https://github.com/ekmett/rounded/issues@@ -39,7 +39,7 @@ source-repository this type: git location: git://github.com/ekmett/rounded.git- tag: rounded-0.2+ tag: rounded-0.3 library exposed-modules:@@ -57,8 +57,8 @@ Numeric.Rounded.Precision build-depends:- base >= 4.8 && < 4.14,- ghc-prim >= 0.4 && < 0.6,+ base >= 4.8 && < 4.15,+ ghc-prim >= 0.4 && < 0.7, reflection >= 2.1.2 && < 2.2, hgmp >= 0.1.1 && < 0.2, long-double >= 0.1 && < 0.2
src/Numeric/Rounded/Simple.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE MagicHash #-}+{-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-} ----------------------------------------------------------------------------- -- |@@ -175,16 +176,16 @@ precision :: Rounded -> Precision precision = fromIntegral . roundedPrec -reifyRounded :: Rounded -> (forall p . R.Precision p => R.Rounded r p -> a) -> a+reifyRounded :: Rounded -> (forall k (p :: k) . R.Precision p => R.Rounded r p -> a) -> a reifyRounded (Rounded p s e l) f = R.reifyPrecision (fromIntegral p) (\q -> f (g q (R.Rounded p s e l))) where g :: R.Precision q => proxy q -> R.Rounded s q -> R.Rounded s q g _ x = x -simplify :: R.Rounded r p -> Rounded+simplify :: forall r k (p :: k) . R.Rounded r p -> Rounded simplify (R.Rounded p s e l) = Rounded p s e l -constant :: (forall r p . (R.Rounding r, R.Precision p) => R.Rounded r p) -> RoundingMode -> Precision -> Rounded+constant :: (forall r k (p :: k) . (R.Rounding r, R.Precision p) => R.Rounded r p) -> RoundingMode -> Precision -> Rounded constant f r q = R.reifyRounding r (\pr -> R.reifyPrecision q (\pq -> g pr pq f)) where g :: (R.Rounding r, R.Precision p) => proxy1 r -> proxy2 p -> R.Rounded r p -> Rounded@@ -197,7 +198,7 @@ kEuler = constant R.kEuler kCatalan = constant R.kCatalan -unary :: (forall r p q . (R.Rounding r, R.Precision p, R.Precision q) => R.Rounded r p -> R.Rounded r q) -> RoundingMode -> Precision -> Rounded -> Rounded+unary :: (forall r kp (p :: kp) kq (q :: kq) . (R.Rounding r, R.Precision p, R.Precision q) => R.Rounded r p -> R.Rounded r q) -> RoundingMode -> Precision -> Rounded -> Rounded unary f r q a = R.reifyRounding r (\pr -> R.reifyPrecision q (\pq -> reifyRounded a (\ra -> g pr pq f ra))) where g :: (R.Rounding r, R.Precision p, R.Precision q) => proxy1 r -> proxy2 q -> (R.Rounded r p -> R.Rounded r q) -> R.Rounded r p -> Rounded@@ -276,19 +277,19 @@ fromRational' :: RoundingMode -> Precision -> Rational -> Rounded fromRational' = fromX fromRational -fromX :: (forall r p . (R.Rounding r, R.Precision p) => x -> R.Rounded r p) -> RoundingMode -> Precision -> x -> Rounded+fromX :: (forall r k (p :: k) . (R.Rounding r, R.Precision p) => x -> R.Rounded r p) -> RoundingMode -> Precision -> x -> Rounded fromX f r p x = R.reifyRounding r (\pr -> R.reifyPrecision p (\pp -> g pr pp (f x))) where g :: (R.Rounding r, R.Precision p) => proxy1 r -> proxy2 p -> R.Rounded r p -> Rounded- g _ _ x = simplify x+ g _ _ y = simplify y -binary :: (forall r p q pq . (R.Rounding r, R.Precision p, R.Precision q, R.Precision pq) => R.Rounded r p -> R.Rounded r q -> R.Rounded r pq) -> RoundingMode -> Precision -> Rounded -> Rounded -> Rounded+binary :: (forall r kp (p :: kp) kq (q :: kq) kpq (pq :: kpq) . (R.Rounding r, R.Precision p, R.Precision q, R.Precision pq) => R.Rounded r p -> R.Rounded r q -> R.Rounded r pq) -> RoundingMode -> Precision -> Rounded -> Rounded -> Rounded binary f r pq a b = R.reifyRounding r (\pr -> R.reifyPrecision pq (\ppq -> reifyRounded a (\ra -> reifyRounded b (\rb -> g pr ppq f ra rb)))) where g :: (R.Rounding r, R.Precision p, R.Precision q, R.Precision pq) => proxy1 r -> proxy2 pq -> (R.Rounded r p -> R.Rounded r q -> R.Rounded r pq) -> R.Rounded r p -> R.Rounded r q -> Rounded g _ _ h x y = simplify (h x y) -binary' :: (forall r p q pq . (R.Rounding r, R.Precision p, R.Precision q, R.Precision pq) => R.Rounded r p -> R.Rounded r q -> R.Rounded r pq) -> Rounded -> Rounded -> Rounded+binary' :: (forall r kp (p :: kp) kq (q :: kq) kpq (pq :: kpq) . (R.Rounding r, R.Precision p, R.Precision q, R.Precision pq) => R.Rounded r p -> R.Rounded r q -> R.Rounded r pq) -> Rounded -> Rounded -> Rounded binary' f a b = binary f R.TowardNearest (precision a `max` precision b) a b add_, agm_, atan2_, copysign_, dim_, div_, fmod_, hypot_, max_, min_, mul_, pow_, sub_@@ -307,13 +308,13 @@ pow_ = binary R.pow_ sub_ = binary R.sub_ -unary' :: (forall r p . (R.Rounding r, R.Precision p) => R.Rounded r p -> a) -> RoundingMode -> Rounded -> a+unary' :: (forall r k (p :: k) . (R.Rounding r, R.Precision p) => R.Rounded r p -> a) -> RoundingMode -> Rounded -> a unary' f r a = R.reifyRounding r (\pr -> reifyRounded a (\ra -> g pr f ra)) where g :: (R.Rounding r, R.Precision p) => proxy r -> (R.Rounded r p -> a) -> R.Rounded r p -> a g _ h x = h x -unary'' :: (forall r p . (R.Rounding r, R.Precision p) => R.Rounded r p -> a) -> Rounded -> a+unary'' :: (forall r k (p :: k) . (R.Rounding r, R.Precision p) => R.Rounded r p -> a) -> Rounded -> a unary'' f a = unary' f R.TowardNearest a toDouble :: RoundingMode -> Rounded -> Double@@ -390,7 +391,7 @@ type Comparison = Rounded -> Rounded -> Bool -cmp :: (forall p q . (R.Precision p, R.Precision q) => R.Rounded R.TowardNearest p -> R.Rounded R.TowardNearest q -> Bool) -> Comparison+cmp :: (forall kp (p :: kp) kq (q :: kq) . (R.Precision p, R.Precision q) => R.Rounded R.TowardNearest p -> R.Rounded R.TowardNearest q -> Bool) -> Comparison cmp f a b = reifyRounded a (\ra -> reifyRounded b (\rb -> f ra rb)) instance Eq Rounded where