aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Types/Reminder.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Types/Reminder.hs')
-rw-r--r--src/Types/Reminder.hs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/Types/Reminder.hs b/src/Types/Reminder.hs
new file mode 100644
index 0000000..5a1f7a5
--- /dev/null
+++ b/src/Types/Reminder.hs
@@ -0,0 +1,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"