module Language.Lambda.SystemF ( Globals(), evalText, module Language.Lambda.SystemF.Expression, module Language.Lambda.SystemF.Parser, module Language.Lambda.SystemF.State ) where import Control.Monad.Except import RIO import qualified RIO.Text as Text import qualified Data.Map as Map import Language.Lambda.Shared.Errors import Language.Lambda.SystemF.Expression import Language.Lambda.SystemF.Parser import Language.Lambda.SystemF.State type Globals = Map.Map String (SystemFExpr String String) evalText :: Text -> Typecheck Text (SystemFExpr Text Text) evalText :: Text -> Typecheck Text (SystemFExpr Text Text) evalText Text text = case Text -> Either ParseError (SystemFExpr Text Text) parseExpr Text text of Left ParseError err -> LambdaException -> Typecheck Text (SystemFExpr Text Text) forall e (m :: * -> *) a. MonadError e m => e -> m a throwError (LambdaException -> Typecheck Text (SystemFExpr Text Text)) -> LambdaException -> Typecheck Text (SystemFExpr Text Text) forall a b. (a -> b) -> a -> b $ Text -> LambdaException ParseError (Text -> LambdaException) -> Text -> LambdaException forall a b. (a -> b) -> a -> b $ String -> Text Text.pack (String -> Text) -> String -> Text forall a b. (a -> b) -> a -> b $ ParseError -> String forall a. Show a => a -> String show ParseError err Right SystemFExpr Text Text res -> SystemFExpr Text Text -> Typecheck Text (SystemFExpr Text Text) forall (m :: * -> *) a. Monad m => a -> m a return SystemFExpr Text Text res