buffet-0.2.0: src/Buffet/Parse/ParseInternal.hs
module Buffet.Parse.ParseInternal
( get
) where
import qualified Buffet.Ir.Ir as Ir
import qualified Buffet.Parse.Menu as Menu
import qualified Buffet.Parse.ParseDish as ParseDish
import qualified Buffet.Parse.ParseMenu as ParseMenu
import qualified Buffet.Toolbox.ExceptionTools as ExceptionTools
import qualified Control.Exception as Exception
import qualified Control.Monad as Monad
import qualified Language.Docker as Docker
import qualified Language.Docker.Parser as Parser
import Prelude (FilePath, IO, Show, ($), (.), fmap, pure, show)
newtype Exception =
Exception Parser.Error
instance Show Exception where
show (Exception error) = Docker.errorBundlePretty error
instance Exception.Exception Exception
get :: FilePath -> IO Ir.Buffet
get = ParseMenu.get Monad.>=> parseBuffet
parseBuffet :: Menu.Menu -> IO Ir.Buffet
parseBuffet menu = do
optionToDish <-
ExceptionTools.sequenceAccumulatingExceptions . fmap ParseDish.get $
Menu.optionToDish menu
pure
Ir.Buffet
{ Ir.copyDummySourcePath = Menu.copyDummySourcePath menu
, Ir.optionToDish = optionToDish
}