module Format ( number , string , unaccent ) where import Data.Array (replicate) import Data.Int (toNumber, fromNumber) import Data.Maybe (fromMaybe) import Data.String (length, joinWith, fromCharArray, toCharArray, toLower) import Math (round, trunc, pow) import Prelude number :: Int -> Number -> String number decimalLength num = formattedIntegerPart <> formattedDecimalPart where formattedIntegerPart = (if decimalLength > 0 then trunc num else round num) # fromNumber # fromMaybe 0 # show formattedDecimalPart = if decimalLength > 0 then ((num - trunc num) * pow 10.0 (toNumber decimalLength)) # round # fromNumber # fromMaybe 0 # show # \str -> "," <> (joinWith "" $ replicate (decimalLength - length str) "0") <> str else "" string :: String -> String string = unaccent <<< toLower unaccent :: String -> String unaccent = fromCharArray <<< map unaccentChar <<< toCharArray where unaccentChar :: Char -> Char unaccentChar c = case c of 'à' -> 'a' 'á' -> 'a' 'â' -> 'a' 'ã' -> 'a' 'ä' -> 'a' 'ç' -> 'c' 'è' -> 'e' 'é' -> 'e' 'ê' -> 'e' 'ë' -> 'e' 'ì' -> 'i' 'í' -> 'i' 'î' -> 'i' 'ï' -> 'i' 'ñ' -> 'n' 'ò' -> 'o' 'ó' -> 'o' 'ô' -> 'o' 'õ' -> 'o' 'ö' -> 'o' 'š' -> 's' 'ù' -> 'u' 'ú' -> 'u' 'û' -> 'u' 'ü' -> 'u' 'ý' -> 'y' 'ÿ' -> 'y' 'ž' -> 'z' _ -> c