packages feed

hydra-0.13.0: src/main/haskell/Hydra/Dsl/Meta/Parsing.hs

-- | Phantom-typed term DSL for the hydra.parsing types

module Hydra.Dsl.Meta.Parsing where

import Hydra.Kernel
import Hydra.Dsl.Meta.Phantoms

import qualified Data.Map as M


-- | Construct a ParseError
parseError :: TTerm String -> TTerm String -> TTerm ParseError
parseError message remainder = record _ParseError [
  _ParseError_message>>: message,
  _ParseError_remainder>>: remainder]

-- | Get the message from a ParseError
parseErrorMessage :: TTerm ParseError -> TTerm String
parseErrorMessage e = project _ParseError _ParseError_message @@ e

-- | Get the remainder from a ParseError
parseErrorRemainder :: TTerm ParseError -> TTerm String
parseErrorRemainder e = project _ParseError _ParseError_remainder @@ e

-- | Construct a successful ParseResult
parseResultSuccess :: TTerm (ParseSuccess a) -> TTerm (ParseResult a)
parseResultSuccess = inject _ParseResult _ParseResult_success

-- | Construct a failed ParseResult
parseResultFailure :: TTerm ParseError -> TTerm (ParseResult a)
parseResultFailure = inject _ParseResult _ParseResult_failure

-- | Construct a ParseSuccess
parseSuccess :: TTerm a -> TTerm String -> TTerm (ParseSuccess a)
parseSuccess value remainder = record _ParseSuccess [
  _ParseSuccess_value>>: value,
  _ParseSuccess_remainder>>: remainder]

-- | Get the value from a ParseSuccess
parseSuccessValue :: TTerm (ParseSuccess a) -> TTerm a
parseSuccessValue s = project _ParseSuccess _ParseSuccess_value @@ s

-- | Get the remainder from a ParseSuccess
parseSuccessRemainder :: TTerm (ParseSuccess a) -> TTerm String
parseSuccessRemainder s = project _ParseSuccess _ParseSuccess_remainder @@ s

-- | Wrap a function as a Parser
parser :: TTerm (String -> ParseResult a) -> TTerm (Parser a)
parser = wrap _Parser

-- | Unwrap a Parser to get its function
runParser :: TTerm (Parser a) -> TTerm String -> TTerm (ParseResult a)
runParser p input = unwrap _Parser @@ p @@ input