
thanks Magnus, great, works so far. I added to check that myDay have to be greater 0: legalDate :: Date -> Bool legalDate (myDay, myMonth, myYear) = maybe False id $ do days <- lookup myMonth monthAndMaxDay return (not (myDay <= 0) && (myDay <= days)) Another thing is, that I have to check for leapYears. I have a function that checks if a year is a leap year isLeapYear :: Int -> Bool isLeapYear year = mod year 4 == 0 monthAndMaxDay has 30 days for February which have to be fix. So i have to check in legalDate if the year is a leap year. If so I have to check myDay in February for 29 days, otherwise for 28 days. How can I implement this to isLegalDate? -------- Original-Nachricht --------
Datum: Thu, 17 Dec 2009 15:21:13 +0000 Von: Magnus Therning
An: kane96 CC: beginners@haskell.org Betreff: Re: [Haskell-beginners] find element of tupels
Hi, I have a list of tuples: [(Jan, 31),(Feb, 28),(Mar, 31),...] called monthAndMaxDay
Date is: type Day = Int data Month = Jan | Feb | Mar | Apr | May | Jun | Jul | Ago | Sep | Oct | Nov | Dec deriving (Eq,Enum,Show) type Year = Int type Date = (Day,Month,Year)
Now I want to check if a date is legal: legalDate :: Date -> Bool legalDate (myDay, myMonth, myYear) = not (myDay <= 0) && myDay >= (find ((== myMonth) . fst) monthAndMaxDay) . snd
the find works to search for the month in the first element of every tupel but at the end I have to check the second value of the tupel (the day)
On Thu, Dec 17, 2009 at 3:03 PM, kane96
wrote: that it issn't higher than the maximal number of days in that month. Where do I have to set the "snd" correctly. Here I get the error: Couldn't match expected type `b -> c' against inferred type `Maybe (Month, Day)'
First of all I'd take a look at the function Prelude.lookup, it'll be useful in this case.
Using that function I'd do something like this:
legalDate (myDay, myMonth, myYear) = maybe False id $ do days <- lookup myMonth monthAndMaxDay return (myDay <= days)
/M
-- Magnus Therning (OpenPGP: 0xAB4DFBA4) magnus@therning.org Jabber: magnus@therning.org http://therning.org/magnus identi.ca|twitter: magthe
-- Preisknaller: GMX DSL Flatrate für nur 16,99 Euro/mtl.! http://portal.gmx.net/de/go/dsl02