snail-0.1.2.0: src/Snail/IO.hs
module Snail.IO where
import Data.Text (Text)
import Data.Text qualified as Text
import Data.Text.IO qualified as Text
import Snail.Ast
import Snail.Lexer
import Text.Megaparsec
-- | Given a 'FilePath', attempt to parse 'SnailAst' from a file.
readSnailFile :: FilePath -> IO (Either String [SnailAst])
readSnailFile fp = do
contents <- Text.readFile fp
pure $ case parse snailAst (show fp) contents of
Left parseErrorBundle -> Left $ errorBundlePretty parseErrorBundle
Right asts -> Right asts
parseSnail :: Text -> Either String [SnailAst]
parseSnail input =
case parse snailAst (Text.unpack input) input of
Left parseErrorBundle -> Left $ errorBundlePretty parseErrorBundle
Right asts -> Right asts