Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Generics where
- import Data.Map (Map)
- import qualified Data.Map as M
- data Name = Persons | Events | Else
- deriving (Show, Ord, Eq)
- maxMsg :: Name -> Int
- maxMsg Persons = 3
- maxMsg Events = 2
- maxMsg Else = 4
- messagesMap :: Map Name [String]
- messagesMap = M.fromList messages
- messages :: [(Name, [String])]
- messages =
- [ (Events,
- [ "Mustard eating competition"
- , "Procrastinating"
- , "Boooooze"
- , "Random rants"
- ])
- , (Persons,
- [ "Leeroy Jenkins"
- , "Teckno Vicking"
- , "Truck"
- , "Standing cat"
- ])
- , (Else,
- [ "Go away!"
- , "Dschungelgelöt"
- , "legacy Code"
- , "42"
- ])
- ]
- transform :: (Ord ki, Ord ko) => ((ki, vi) -> (ko, vo)) -> Map ki vi -> Map ko vo
- transform f input = M.fromList $ map f (M.toList input)
- cropByName :: (Name, [String]) -> (Name, [String])
- cropByName (name, messages) = (name, take (maxMsg name) messages)
- countByKey :: (k, [v]) -> (k, Int)
- countByKey (key, values) = (key, length values)
- main :: IO ()
- main = do
- putStrLn $ show messagesMap
- putStrLn $ show $ transform cropByName messagesMap
- putStrLn $ show $ transform countByKey messagesMap
- return ()
Add Comment
Please, Sign In to add comment