úÎ-i,      Safe-Inferred HArbitrary precision decimal type. As a rule programs should do decimal C arithmetic with this type and only convert to other instances of   DecimalRaw* where required by an external interface. FUsing this type is also faster because it avoids repeated conversions  to and from Integer. IRaw decimal arithmetic type constructor. A decimal value consists of an M integer mantissa and a negative exponent which is interpreted as the number + of decimal places. The value stored in a  Decimal d is therefore equal to:  , decimalMantissa d / (10 ^ decimalPlaces d) The Show& instance will add trailing zeros, so show $ Decimal 3 1500  will return "1.500". Conversely the Read instance will use the decimal $ places to determine the precision. EArithmetic and comparision operators convert their arguments to the I greater of the two precisions, and return a result of that precision. J Regardless of the type of the arguments, all mantissa arithmetic is done  using Integer= types, so application developers do not need to worry about K overflow in the internal algorithms. However the result of each operator G will be converted to the mantissa type without checking for overflow. CConvert a real fractional value into a Decimal of the appropriate  precision.  Convert a  DecimalRaw0 from one base representation to another. Does 3 not check for overflow in the new representation. Round a  DecimalRaw* to a specified number of decimal places.  Divide a  DecimalRaw0 value into one or more portions. The portions K will be approximately equal, and the sum of the portions is guaranteed to  be the original value. IThe portions are represented as a list of pairs. The first part of each K pair is the number of portions, and the second part is the portion value. . Hence 10 dollars divided 3 ways will produce [(2, 3.33), (1, 3.34)].  Allocate a  DecimalRaw2 value proportionately with the values in a list. H The allocated portions are guaranteed to add up to the original value. JSome of the allocations may be zero or negative, but the sum of the list J must not be zero. The allocation is intended to be as close as possible  to the following:  let result = allocate d parts 6 in all (== d / sum parts) $ zipWith (/) result parts  Multiply a  DecimalRaw by a RealFrac value. SCount the divisors, i.e. the count of 2 divisors in 18 is 1 because 18 = 2 * 3 * 3 ;Try to convert Rational to Decimal with absolute precision 6 return string with fail description if not converted FReduce the exponent of the decimal numer to the minimal posible value  Denominator base dividing value 1The count of divisors and the result of division            Decimal-0.3.1 Data.DecimalDecimal DecimalRaw decimalPlacesdecimalMantissarealFracToDecimaldecimalConvertroundTodivideallocate*.eitherFromRationalnormalizeDecimalfactorNdivRoundroundMax$fRealFracDecimalRaw$fFractionalDecimalRaw$fRealDecimalRaw$fNumDecimalRaw$fOrdDecimalRaw$fEqDecimalRaw$fReadDecimalRaw$fShowDecimalRaw$fNFDataDecimalRaw