packages feed

fraction 0.0.0.0 → 0.0.1.0

raw patch · 2 files changed

+39/−8 lines, 2 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Data.Fraction: fromNumber :: (Real real) => (real, real) -> real -> Fraction
+ Data.Fraction: toNumber :: (Double, Double) -> Fraction -> Double
- Data.Fraction: fromFactor :: Double -> Fraction
+ Data.Fraction: fromFactor :: (Real real) => real -> Fraction
- Data.Fraction: fromPercentage :: Double -> Fraction
+ Data.Fraction: fromPercentage :: (Real real) => real -> Fraction

Files

fraction.cabal view
@@ -1,5 +1,5 @@ Name:          fraction-Version:       0.0.0.0+Version:       0.0.1.0 Cabal-Version: >= 1.2 Build-Type:    Simple License:       BSD3
src/Data/Fraction.hs view
@@ -12,8 +12,10 @@     -- * Conversion     fromFactor,     fromPercentage,+    fromNumber,     toFactor,-    toPercentage+    toPercentage,+    toNumber  ) where @@ -41,19 +43,34 @@          If the factor is not from the interval [0,1], a runtime error occurs.     -}-    fromFactor :: Double -> Fraction-    fromFactor factor | factor >= 0 && factor <= 1 = Fraction factor-                      | otherwise                  = error "fraction: factor out of bounds"+    fromFactor :: (Real real) => real -> Fraction+    fromFactor = fromNumber (0,1)      {-|         Converts a percentage into its corresponding fraction.          If the percentage is not from the interval [0,100], a runtime error occurs.     -}-    fromPercentage :: Double -> Fraction-    fromPercentage perc | perc >= 0 && perc <= 100 = Fraction (perc / 100)-                        | otherwise                = error "fraction: percentage out of bounds"+    fromPercentage :: (Real real) => real -> Fraction+    fromPercentage = fromNumber (0,100) +    {-|+        Converts a number into its corresponding fraction regarding a certain interval.++        If the lower bound of the interval is equal to or greater than the upper bound or the value+        is not from the interval, a runtime error occurs.+    -}+    fromNumber :: (Real real) => (real,real) -> real -> Fraction+    fromNumber (lower,upper) real = checkInterval (lower,upper) `seq`+                                    if lower <= real && real <= upper+                                        then Fraction $+                                             (realToFrac real - fracMin) / (fracMax - fracMin)+                                        else error "fraction: real out of bounds" where++        fracMin = realToFrac lower++        fracMax = realToFrac upper+     -- |Converts a fraction into its corresponding factor.     toFactor :: Fraction -> Double     toFactor (Fraction factor) = factor@@ -61,4 +78,18 @@     -- |Converts a fraction into its corresponding percentage.     toPercentage :: Fraction -> Double     toPercentage (Fraction factor) = factor * 100++    {-|+        Converts a fraction into its corresponding number regarding a certain interval.++        If the lower bound of the interval is equal to or greater than the upper bound, a runtime+        error occurs.+    -}+    toNumber :: (Double,Double) -> Fraction -> Double+    toNumber (lower,upper) (Fraction factor) = checkInterval (lower,upper) `seq`+                                               factor * (upper - lower) + lower++    checkInterval :: (Real real) => (real,real) -> ()+    checkInterval (lower,upper) | lower < upper = ()+                                | otherwise     = error "fraction: no proper interval"