-- | Internal module in order to facilitate testability. module AoC.Util (solveRiddle, readFileUtf8) where readFileUtf8 :: (MonadIO m) => FilePath -> m Text readFileUtf8 = fmap (decodeUtf8With lenientDecode) . readFileBS solveRiddle :: (MonadIO m) => FilePath -> (Text -> [Text]) -> m () solveRiddle file solver = do results <- solver <$> readFileUtf8 file forM_ (results `zip` [1 :: Int ..]) $ \(solution, part) -> putTextLn $ " solution to part-" <> show part <> ": " <> solution