Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data Gender = Male | Female | Unknown | None
- deriving (Show, Eq)
- data Person = Person { fName :: String, lName :: String, gender :: Gender }
- deriving (Show, Eq)
- data Client = GovOrg { code :: String, name :: String }
- | Individual { code :: String, person :: Person }
- | Company { code :: String, name :: String, contact :: Person }
- deriving (Show, Eq)
- data GenderCount = GenderCount { male :: Int, female :: Int, unknown :: Int } deriving Show
- countGenders :: [Client] -> GenderCount
- countGenders cs = GenderCount (sum m) (sum f) (sum u)
- where (m, f, u) = unzip3 $ map genderCount cs
- genderCount :: Client -> (Int, Int, Int)
- genderCount c = case cGender c of
- Male -> (1, 0, 0)
- Female -> (0, 1, 0)
- Unknown -> (0, 0, 1)
- None -> (0, 0, 0)
- cGender :: Client -> Gender
- cGender GovOrg {} = None
- cGender Individual { .. } = gender person
- cGender Company { .. } = gender contact
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement