Guest User

Untitled

a guest
Jun 21st, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. module Generics where
  2.  
  3. import Data.Map (Map)
  4. import qualified Data.Map as M
  5.  
  6. data Name = Persons | Events | Else
  7. deriving (Show, Ord, Eq)
  8.  
  9. maxMsg :: Name -> Int
  10. maxMsg Persons = 3
  11. maxMsg Events = 2
  12. maxMsg Else = 4
  13.  
  14. messagesMap :: Map Name [String]
  15. messagesMap = M.fromList messages
  16.  
  17. messages :: [(Name, [String])]
  18. messages =
  19. [ (Events,
  20. [ "Mustard eating competition"
  21. , "Procrastinating"
  22. , "Boooooze"
  23. , "Random rants"
  24. ])
  25. , (Persons,
  26. [ "Leeroy Jenkins"
  27. , "Teckno Vicking"
  28. , "Truck"
  29. , "Standing cat"
  30. ])
  31. , (Else,
  32. [ "Go away!"
  33. , "Dschungelgelöt"
  34. , "legacy Code"
  35. , "42"
  36. ])
  37. ]
  38.  
  39. transform :: (Ord ki, Ord ko) => ((ki, vi) -> (ko, vo)) -> Map ki vi -> Map ko vo
  40. transform f input = M.fromList $ map f (M.toList input)
  41.  
  42. cropByName :: (Name, [String]) -> (Name, [String])
  43. cropByName (name, messages) = (name, take (maxMsg name) messages)
  44.  
  45. countByKey :: (k, [v]) -> (k, Int)
  46. countByKey (key, values) = (key, length values)
  47.  
  48. main :: IO ()
  49. main = do
  50. putStrLn $ show messagesMap
  51. putStrLn $ show $ transform cropByName messagesMap
  52. putStrLn $ show $ transform countByKey messagesMap
  53. return ()
Add Comment
Please, Sign In to add comment