module Buffet.Parse.ParseMenuFromFolder ( get ) where import qualified Buffet.Ir.Ir as Ir import qualified Buffet.Parse.Menu as Menu import qualified Control.Monad as Monad import qualified Data.Map.Strict as Map import qualified Data.Text as T import Prelude (FilePath, IO, ($), (.), fmap, pure) import qualified System.Directory as Directory import qualified System.FilePath as FilePath get :: FilePath -> IO Menu.Menu get :: FilePath -> IO Menu get FilePath menu = do [FilePath] folderEntries <- FilePath -> IO [FilePath] Directory.listDirectory FilePath menu [FilePath] options <- (FilePath -> IO Bool) -> [FilePath] -> IO [FilePath] forall (m :: * -> *) a. Applicative m => (a -> m Bool) -> [a] -> m [a] Monad.filterM (FilePath -> IO Bool Directory.doesDirectoryExist (FilePath -> IO Bool) -> (FilePath -> FilePath) -> FilePath -> IO Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . FilePath -> FilePath -> FilePath FilePath.combine FilePath menu) [FilePath] folderEntries Menu -> IO Menu forall (f :: * -> *) a. Applicative f => a -> f a pure Menu Menu.defaultMenu { optionToDish :: Map Option FilePath Menu.optionToDish = [(Option, FilePath)] -> Map Option FilePath forall k a. Ord k => [(k, a)] -> Map k a Map.fromList ([(Option, FilePath)] -> Map Option FilePath) -> [(Option, FilePath)] -> Map Option FilePath forall a b. (a -> b) -> a -> b $ (FilePath -> (Option, FilePath)) -> [FilePath] -> [(Option, FilePath)] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (\FilePath option -> ( Text -> Option Ir.Option (Text -> Option) -> Text -> Option forall a b. (a -> b) -> a -> b $ FilePath -> Text T.pack FilePath option , [FilePath] -> FilePath FilePath.joinPath [FilePath menu, FilePath option, FilePath "Dockerfile"])) [FilePath] options }