blob: e8ab6614def6eab3faa3d7490c711e8e7302fcaa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
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
|