diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2015-03-29 14:33:49 +0900 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2015-03-29 14:33:49 +0900 |
commit | 007c2c303d727727f1755ac7911fe995fad098e0 (patch) | |
tree | 29e7aabb183084191dc7b2e42a189c532009afa7 /src/Types/Reminder.hs | |
download | srem-007c2c303d727727f1755ac7911fe995fad098e0.tar.gz |
initial commit: rewriting srem in Haskell
Diffstat (limited to 'src/Types/Reminder.hs')
-rw-r--r-- | src/Types/Reminder.hs | 40 |
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" |