packages feed

Jikka-5.2.0.0: src/Jikka/Core/Parse.hs

{-# LANGUAGE FlexibleContexts #-}

module Jikka.Core.Parse
  ( run,
    parseProgram,
    parseExpr,
    parseType,
    parseRule,
  )
where

import Data.Text (Text, unpack)
import Jikka.Common.Alpha
import Jikka.Common.Error
import Jikka.Core.Language.Expr
import qualified Jikka.Core.Parse.Alex as L
import qualified Jikka.Core.Parse.Happy as P

parseRule :: (MonadAlpha m, MonadError Error m) => String -> m (String, [(VarName, Type)], Expr, Expr)
parseRule input = do
  tokens <- L.run input
  P.runRule tokens

parseType :: (MonadAlpha m, MonadError Error m) => String -> m Type
parseType input = do
  tokens <- L.run input
  P.runType tokens

parseExpr :: (MonadAlpha m, MonadError Error m) => String -> m Expr
parseExpr input = do
  tokens <- L.run input
  P.runExpr tokens

parseProgram :: (MonadAlpha m, MonadError Error m) => String -> m Program
parseProgram input = do
  tokens <- L.run input
  P.runProgram tokens

run :: (MonadAlpha m, MonadError Error m) => FilePath -> Text -> m Program
run _ input = do
  tokens <- L.run $ unpack input
  P.runProgram tokens