
Hi Peter,
-- smart constructor with serialNumber date serialNumber | serialNumber > 0 = Date serialNumber | otherwise = error ("invalid serialNumber " ++ show serialNumber)
Instead of raising an error it's more secure to return a Maybe value. date :: Int -> Maybe Date date serialNumber | serialNumber > 0 = Just $ Date serialNumber | otherwise = Nothing
-- smart constructor with day month year date2 day month year | month >= 1 && month <=12 = undefined | otherwise = error ("invalid month " ++ show month)
To increase type safety it's a good idea to use as much explicit data types instead of Int values as possible: data Month = January | ...
If this is the case, what would be the natural Haskell way of organizing the smart constructors ? Just number them as above ? Or naming them dateFromSerialNumber, dateFromDayMonthYear ?
I would use the descriptive names but leave out the 'date', because you could still have: import qualified Date Date.fromSerialNumber Greetings, Daniel