module Main where import System.Directory (listDirectory) import System.FilePath (takeExtension) import qualified Data.Text as T import qualified Data.Text.IO as TIO import Roux.Parser (parseCookFile) main :: IO () main = do entries <- listDirectory "/work/personal-recipes" let cookFiles = filter ((== ".cook") . takeExtension) (map ("/work/personal-recipes/" ++) entries) results <- mapM testParse cookFiles let failures = [(name, err) | Right (name, err) <- results] successes = length [() | Left name <- results] putStrLn $ "\n=== Summary ===" putStrLn $ "Total: " ++ show (length results) putStrLn $ "OK: " ++ show successes putStrLn $ "Failures: " ++ show (length failures) mapM_ (\(name, err) -> putStrLn $ "\n " ++ name ++ ":\n " ++ err) failures where testParse fp = do let name = reverse . takeWhile (/= '/') . reverse $ fp content <- TIO.readFile fp case parseCookFile content of Left err -> pure (Right (name, err)) Right _ -> pure (Left name)