aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Types/Reminder.hs
blob: 5a1f7a5014ec81a5713d1a16d9c944d17efa7ed9 (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
module Types.Reminder ( Reminder
                      , makeReminder
                      , getReminderHour
                      , getReminderMinute
                      , getReminderText
                      ) where

type Hour   = Int
type Minute = Int

data Reminder = Reminder { getReminderHour :: Hour
                         , getReminderMinute :: Minute
                         , getReminderText :: String}
              deriving (Eq, Ord)

instance Show Reminder where
    show (Reminder h m s) =
        (show . to12Hour) h
        ++ ":" ++ (zeroPadTime . show) m
        ++ amPm h ++ " " ++ s

makeReminder :: Hour -> Minute -> String -> Maybe Reminder
makeReminder h m s = if   h `elem` [0..23] && m `elem` [0..59]
                     then return $ Reminder h m s
                     else fail "invalid reminder"

zeroPadTime   :: String -> String
zeroPadTime t = if   length t < 2
                then '0' : t
                else t

to12Hour :: Int -> Int
to12Hour h = if   h > 12
             then h - 12
             else h

amPm :: Int -> String
amPm h = if   h > 12
         then "pm"
         else "am"