Advertisement
Guest User

asdf2

a guest
May 4th, 2014
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. data Gender = Male | Female | Unknown | None
  2.               deriving (Show, Eq)
  3.  
  4. data Person = Person { fName :: String, lName :: String, gender :: Gender }
  5.               deriving (Show, Eq)
  6.  
  7. data Client = GovOrg { code :: String,     name :: String }
  8.             | Individual { code :: String, person :: Person }
  9.             | Company { code :: String,    name :: String, contact :: Person }
  10.               deriving (Show, Eq)
  11.  
  12. data GenderCount = GenderCount { male :: Int, female :: Int, unknown :: Int } deriving Show
  13.  
  14. countGenders :: [Client] -> GenderCount
  15. countGenders cs = GenderCount (sum m) (sum f) (sum u)
  16.     where (m, f, u) = unzip3 $ map genderCount cs
  17.  
  18. genderCount :: Client -> (Int, Int, Int)
  19. genderCount c = case cGender c of
  20.                      Male    ->  (1, 0, 0)
  21.                      Female  ->  (0, 1, 0)
  22.                      Unknown ->  (0, 0, 1)
  23.                      None    ->  (0, 0, 0)
  24.  
  25. cGender :: Client -> Gender
  26. cGender GovOrg {}         = None
  27. cGender Individual { .. } = gender person
  28. cGender Company { .. }    = gender contact
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement