module Error import Quox.Pretty import Quox.Parser import Quox.Untyped.Erase import Quox.Untyped.Scheme import Options import Output import System.File public export data Error = ParseError String Parser.Error | FromParserError FromParser.Error | EraseError Erase.Error | WriteError FilePath FileError | NoMain | MultipleMains (List Scheme.Id) %hide FromParser.Error %hide Erase.Error %hide Lexer.Error %hide Parser.Error export loadError : Loc -> FilePath -> FileError -> Error loadError loc file err = FromParserError $ LoadError loc file err export prettyError : {opts : LayoutOpts} -> Error -> Eff Pretty (Doc opts) prettyError (ParseError file e) = prettyParseError file e prettyError (FromParserError e) = FromParser.prettyError True e prettyError (EraseError e) = Erase.prettyError True e prettyError NoMain = pure "no #[main] function given" prettyError (MultipleMains xs) = pure $ sep ["multiple #[main] functions given:", separateLoose "," !(traverse prettyId xs)] prettyError (WriteError file e) = pure $ hangSingle 2 (text "couldn't write file \{file}:") (pshow e) export dieError : Options -> Error -> IO a dieError opts e = die (Opts opts.width) $ runPretty ({outFile := Console} opts) Console $ prettyError e