import Data.List.Split (splitOn) import Data.List (sort) part1 :: [Integer] -> IO () part1 = \x -> putStr "part 1: " >> print (maximum x) part2 :: [Integer] -> IO () part2 = \x -> putStr "part 2: " >> (print $ sum $ take 3 $ reverse $ sort x) rmap :: [a -> b] -> a -> [b] rmap xs a = map (\f -> f a) xs main :: IO () main = do getContents >>= \x -> let b = (map (sum . map read) . splitOn [""] $ lines x) in sequence_ $ rmap [part1, part2] b -- -- part 1 -- putStr "part 1: " -- print $ maximum f -- -- part 2 -- putStr "part 2: " -- print $ sum $ take 3 $ reverse $ sort f