Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data Contact = Contact { name :: String
- , phone :: [String]
- } deriving (Show, Read, Eq, Ord)
- data Date = Date { day :: Int
- , month :: Int
- } deriving (Show, Read, Eq, Ord)
- data Birthday = Birthday { nick :: String
- , date :: Date
- } deriving (Show, Read, Eq, Ord)
- data Time = Time { hours :: Int
- , minutes :: Int
- } deriving (Show, Read, Eq, Ord)
- data Event = Event { dateEvent :: Date
- , time :: Time
- , place :: String
- , description :: String
- , notes :: String
- } deriving (Show, Read, Eq, Ord)
- data Note = Note { contact :: Contact
- , birthday :: Birthday
- , events :: [Event]
- } deriving (Show, Read, Eq, Ord)
- contact1, contact2, contact3, contact4, contact5 :: Contact
- contact1 = Contact "Sergio" ["067-431-26-22"]
- contact2 = Contact "Olha" ["050-662-11-08", "067-147-32-65"]
- contact3 = Contact "Sophie" []
- contact4 = Contact "GrandPa" ["067-478-21-56"]
- contact5 = Contact "GrandMa" ["067-324-98-43"]
- birthday1, birthday2, birthday3, birthday4, birthday5 :: Birthday
- birthday1 = Birthday "Sergio" Date {day = 1, month = 1}
- birthday2 = Birthday "Olha" Date {day = 11, month = 8}
- birthday3 = Birthday "Sophie" Date {day = 6, month = 11}
- birthday4 = Birthday "GrandPa" Date {day = 16, month = 5}
- birthday5 = Birthday "GrandMa" Date {day = 29, month = 11}
- events1, events2, events3, events4, events5 :: [Event]
- events1 = [Event {dateEvent = Date {day = 1, month = 1}, time = Time {hours = 18, minutes = 0 }, place = "Kyiv restaurant", description = "celebrate Birthday", notes = "be prepared"}, Event {dateEvent = Date {day = 6, month = 6}, time = Time {hours = 10, minutes = 20 }, place = "KPI", description = "first study day", notes = "take laptop"}]
- events2 = [Event {dateEvent = Date {day = 30, month = 5}, time = Time {hours = 17, minutes = 30 }, place = "Kyiv airport", description = "meet sister", notes = "take taxi"}]
- events3 = [Event {dateEvent = Date {day = 1, month = 1}, time = Time {hours = 11, minutes = 0 }, place = "mall", description = "visit playground", notes = "appr. 2 hours"}]
- events4 = [Event {dateEvent = Date {day = 16, month = 5}, time = Time {hours = 10, minutes = 15 }, place = "Skype", description = "have a talk", notes = ""}]
- events5 = [Event {dateEvent = Date {day = 29, month = 11}, time = Time {hours = 17, minutes = 0 }, place = "Drabiv", description = "celebrate Birthday", notes = "take a cake"}, Event {dateEvent = Date {day = 21, month = 07}, time = Time {hours = 10, minutes = 0 }, place = "Skype", description = "have a talk", notes = "brother"}]
- myNotes :: [Note]
- myNotes = [Note {contact = contact1, birthday = birthday1, events = events1}, Note {contact = contact2, birthday = birthday2, events = events2}, Note {contact = contact3, birthday = birthday3, events = events3}, Note {contact = contact4, birthday = birthday4, events = events4}, Note {contact = contact5, birthday = birthday5, events = events5}]
- eventsByDate :: [Note] -> Date -> [Event]
- eventsByDate notes date = eventsByDateAcc notes date []
- eventsByDateAcc :: [Note] -> Date -> [Event] -> [Event]
- eventsByDateAcc [] _ acc = acc
- eventsByDateAcc _ Date {day = 0, month = 0} acc = acc
- eventsByDateAcc (note:notes) date acc = eventsByDateAcc notes date (acc ++ (getEventByDate note date [] ) )
- getEventByDate :: Note -> Date -> [Event] -> [Event]
- getEventByDate (Note {contact = _, birthday = _, events = e}) date acc
- | e == [] = acc
- getEventByDate (Note {contact = c, birthday = b, events = (e:es)}) date acc
- | checkDates e date == True = getEventByDate Note {contact = c, birthday = b, events = es} date (acc ++ [e])
- | otherwise = getEventByDate Note {contact = c, birthday = b, events = es} date acc
- checkDates :: Event -> Date -> Bool
- checkDates (Event {dateEvent = Date {day = eD, month = eM}, time = _, place = _, description = _, notes = _}) (Date {day = d, month = m})
- | eD == d && eM == m = True
- | otherwise = False
- eventsByPeriod :: [Note] -> Date -> Date -> [Event]
- eventsByPeriod notes dateFrom dateTo = eventsByPeriodAcc notes dateFrom dateTo []
- eventsByPeriodAcc :: [Note] -> Date -> Date -> [Event] -> [Event]
- eventsByPeriodAcc [] _ _ acc = acc
- eventsByPeriodAcc (note:notes) dateFrom dateTo acc = eventsByPeriodAcc notes dateFrom dateTo (acc ++ (getEventByPeriod note dateFrom dateTo [] ) )
- getEventByPeriod :: Note -> Date -> Date -> [Event] -> [Event]
- getEventByPeriod (Note {contact = _, birthday = _, events = eP}) dateFrom dateTo acc
- | eP == [] = acc
- getEventByPeriod (Note {contact = c, birthday = b, events = (eP:ePs)}) dateFrom dateTo acc
- | checkPeriod eP dateFrom dateTo == True = getEventByPeriod Note {contact = c, birthday = b, events = ePs} dateFrom dateTo (acc ++ [eP])
- | otherwise = getEventByPeriod Note {contact = c, birthday = b, events = ePs} dateFrom dateTo acc
- checkPeriod :: Event -> Date -> Date -> Bool
- checkPeriod (Event {dateEvent = Date {day = eD, month = eM}, time = _, place = _, description = _, notes = _}) (Date {day = dFrom, month = mFrom}) (Date {day = dTo, month = mTo})
- | ((30*eM + eD) >= (30*mFrom + dFrom)) && ((30*eM + eD) <= (30*mTo + dTo)) = True
- | otherwise = False
- searchByString :: [Note] -> String -> [Note]
- notes `searchByString` searchString = searchByStringAcc notes searchString []
- searchByStringAcc :: [Note] -> String -> [Note] -> [Note]
- searchByStringAcc [] _ acc = acc
- searchByStringAcc (note:notes) searchString acc
- | ( compareWithSearchString note searchString ) == True = searchByStringAcc notes searchString ( note:acc )
- | ( compareWithSearchString note searchString ) == False = searchByStringAcc notes searchString acc
- compareWithSearchString :: Note -> String -> Bool
- compareWithSearchString ( Note {contact = ( Contact {name = myName, phone = _ }), birthday = _, events = _} ) searchString
- | myName == [] && searchString == [] = True
- | myName == [] && searchString /= [] = False
- compareWithSearchString ( Note {contact = (Contact {name = (n:ns), phone = p }), birthday = b, events = e} ) (s:ss)
- | n == s = compareWithSearchString ( Note { contact = ( Contact { name = ns, phone = p } ), birthday = b, events = e} ) ss
- | otherwise = False
Add Comment
Please, Sign In to add comment