module AoC where (.:) :: (c -> d) -> (a -> b -> c) -> a -> b -> d f .: g = (f .) . g infixl 8 .: runAoC :: (Show r1, Show r2) => (String -> i) -> (i -> r1) -> (i -> r2) -> IO () runAoC inputTransform part1 part2 = do contents <- inputTransform <$> getContents print $ part1 contents print $ part2 contents