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
71
72
73
74
75
76
77
78
|
module Common.View.Format
( shortDay
, longDay
, price
, number
, monthAndYear
) where
import qualified Data.List as L
import qualified Data.Maybe as Maybe
import Data.Text (Text)
import qualified Data.Text as T
import Data.Time.Calendar (Day)
import qualified Data.Time.Calendar as Calendar
import Common.Model (Currency (..))
import Common.Msg (Key)
import qualified Common.Msg as Msg
shortDay :: Day -> Text
shortDay date =
Msg.get $ Msg.Date_Short
day
month
(fromIntegral year)
where (year, month, day) = Calendar.toGregorian date
longDay :: Day -> Text
longDay date =
Msg.get $ Msg.Date_Long
day
(Maybe.fromMaybe "−" . fmap Msg.get . monthToKey $ month)
(fromIntegral year)
where (year, month, day) = Calendar.toGregorian date
monthAndYear :: Day -> Text
monthAndYear date =
T.intercalate " "
[ Maybe.fromMaybe "" . fmap ((\t -> T.concat [t, " "]) . Msg.get) . monthToKey $ month
, T.pack . show $ year
]
where (year, month, _) = Calendar.toGregorian date
monthToKey :: Int -> Maybe Key
monthToKey 1 = Just Msg.Month_January
monthToKey 2 = Just Msg.Month_February
monthToKey 3 = Just Msg.Month_March
monthToKey 4 = Just Msg.Month_April
monthToKey 5 = Just Msg.Month_May
monthToKey 6 = Just Msg.Month_June
monthToKey 7 = Just Msg.Month_July
monthToKey 8 = Just Msg.Month_August
monthToKey 9 = Just Msg.Month_September
monthToKey 10 = Just Msg.Month_October
monthToKey 11 = Just Msg.Month_November
monthToKey 12 = Just Msg.Month_December
monthToKey _ = Nothing
price :: Currency -> Int -> Text
price (Currency currency) amount = T.concat [ number amount, " ", currency ]
number :: Int -> Text
number n =
T.pack
. (++) (if n < 0 then "-" else "")
. reverse
. concat
. L.intersperse " "
. group 3
. reverse
. show
. abs $ n
group :: Int -> [a] -> [[a]]
group n xs =
if length xs <= n
then [xs]
else (take n xs) : (group n (drop n xs))
|