module Output import Quox.Pretty import Options import System.File import System public export data ConsoleChannel = COut | CErr export consoleHandle : ConsoleChannel -> File consoleHandle COut = stdout consoleHandle CErr = stderr public export data OpenFile = OConsole ConsoleChannel | OFile String File | ONone export toOutFile : OpenFile -> OutFile toOutFile (OConsole _) = Console toOutFile (OFile f _) = File f toOutFile ONone = NoOut export withFile : HasIO m => String -> (String -> FileError -> m a) -> (OpenFile -> m a) -> m a withFile f catch act = Prelude.do res <- withFile f WriteTruncate pure (Prelude.map Right . act . OFile f) either (catch f) pure res export withOutFile : HasIO m => ConsoleChannel -> OutFile -> (String -> FileError -> m a) -> (OpenFile -> m a) -> m a withOutFile _ (File f) catch act = withFile f catch act withOutFile ch Console catch act = act $ OConsole ch withOutFile _ NoOut catch act = act ONone private hlFor : HLType -> OutFile -> HL -> Highlight hlFor Guess Console = highlightSGR hlFor Guess _ = noHighlight hlFor NoHL _ = noHighlight hlFor Term _ = highlightSGR hlFor Html _ = highlightHtml export runPretty : Options -> OutFile -> Eff Pretty a -> a runPretty opts file act = runPrettyWith Outer opts.flavor (hlFor opts.hlType file) 2 act export die : HasIO io => (opts : LayoutOpts) -> Doc opts -> io a die opts err = do ignore $ fPutStr stderr $ render opts err exitFailure