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 +1/−1
- src/Data/Fraction.hs +38/−7
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"