{-# LANGUAGE OverloadedStrings #-} module Main (main) where import Prelude hiding (readFile) import Text.Pretty.Simple (pPrintOpt, OutputOptions (..), StringOutputStyle (..), CheckColorTty (..)) import Text.Megaparsec (errorBundlePretty, sourcePosPretty, runParserT, ParseErrorBundle) import Parser.Util import Data.Text (Text) import Data.Bifunctor (Bifunctor(bimap)) import Parser.Module (parser) import Control.Monad.Reader (runReader) import Data.Void (Void) import Parser.Expr (createExpressionParser) main :: IO () main = case runParser parser "f x y = x + y; g x1 y2 = f x1 y2+ f y2 x1;" (ParserData $ createExpressionParser []) of Left err -> putStrLn $ errorBundlePretty err Right res -> let x = map (bimap sourcePosPretty sourcePosPretty <$>) res in pPrintOpt NoCheckColorTty (OutputOptions 2 120 True True 0 Nothing EscapeNonPrintable) x -- | Execute a given parser. runParser :: Parser a -- ^ The parser to execute. -> Text -- ^ The input to parse. -> ParserData -- ^ Global parser data to use. -> Either (ParseErrorBundle Text Void) a runParser p = runReader . runParserT p ""