Safe Haskell | None |
---|---|
Language | GHC2021 |
Symparsec.Example.Expr
Description
An example Symparsec parser for a basic expression tree.
Synopsis
- data Expr a
- data BOp
- type family Eval (expr :: Expr Natural) :: Natural where ...
- type family EvalBOp (bop :: BOp) (l :: Natural) (r :: Natural) :: Natural where ...
- data ExprTok
- data PExpr (s :: FunKind PState (PReply (Expr Natural)))
- type family PExprNext (sPrev :: PState) (ops :: [ExprTok]) (exprs :: [Expr Natural]) (s :: (Maybe Char, PState)) :: PReply (Expr Natural) where ...
- type family PExprEnd (sPrev :: State Symbol n) (s :: State Symbol n) (ops :: [ExprTok]) (exprs :: [Expr a]) :: Reply Symbol n (Expr a) where ...
- type family PExprEndPopOp (sPrev :: State Symbol n) (s :: State Symbol n) (ops :: [ExprTok]) (exprs :: [Expr a]) (op :: BOp) :: Reply Symbol n (Expr a) where ...
- type family PExprCh (sPrev :: PState) (s :: PState) (ops :: [ExprTok]) (exprs :: [Expr Natural]) (ch :: Char) :: PReply (Expr Natural) where ...
- type family PExprELit (sPrev :: PState) (s :: PState) (ops :: [ExprTok]) (exprs :: [Expr Natural]) (ch :: Char) (mDigit :: Maybe Natural) :: PReply (Expr Natural) where ...
- type family PExprELitEnd (ops :: [ExprTok]) (exprs :: [Expr Natural]) (res :: PReply Natural) :: PReply (Expr Natural) where ...
- type family PExprEBOp (sPrev :: PState) (s :: PState) (ops :: [ExprTok]) (exprs :: [Expr Natural]) (ch :: Char) (mbop :: Maybe ExprTok) :: PReply (Expr Natural) where ...
- type family PExprParenRStart (sPrev :: PState) (s :: PState) (exprs :: [Expr Natural]) (ops :: [ExprTok]) :: PReply (Expr Natural) where ...
- type family PExprParenR (sPrev :: PState) (s :: PState) (exprs :: [Expr Natural]) (ops :: [ExprTok]) :: PReply (Expr Natural) where ...
- type family PExprParenRPopBOp (sPrev :: PState) (s :: PState) (bop :: BOp) (ops :: [ExprTok]) (exprs :: [Expr Natural]) :: PReply (Expr Natural) where ...
- type family PExprEBOpOpCh (ch :: Char) :: Maybe ExprTok where ...
- type family PExprEBOp' (sPrev :: PState) (s :: PState) (op :: BOp) (prec :: Natural) (exprs :: [Expr Natural]) (ops :: [ExprTok]) :: PReply (Expr Natural) where ...
- type family PExprEBOpPop (sPrev :: PState) (s :: PState) (op :: BOp) (prec :: Natural) (opPrev :: BOp) (ops :: [ExprTok]) (exprs :: [Expr Natural]) :: PReply (Expr Natural) where ...
- type family BOpPrec (bop :: BOp) :: Natural where ...
Documentation
A basic expression tree, polymorphic over a single literal type.
type family PExprNext (sPrev :: PState) (ops :: [ExprTok]) (exprs :: [Expr Natural]) (s :: (Maybe Char, PState)) :: PReply (Expr Natural) where ... Source #
type family PExprEnd (sPrev :: State Symbol n) (s :: State Symbol n) (ops :: [ExprTok]) (exprs :: [Expr a]) :: Reply Symbol n (Expr a) where ... Source #
Equations
PExprEnd (sPrev :: State Symbol n) (s :: State Symbol n) ('TokBOp op ': ops) (exprs :: [Expr a]) = PExprEndPopOp sPrev s ops exprs op | |
PExprEnd (sPrev :: State Symbol n) (s :: State Symbol n) ('[] :: [ExprTok]) ('[expr] :: [Expr a]) = 'Reply ('OK expr :: Result Symbol n (Expr a)) s | |
PExprEnd (sPrev :: State Symbol n) (s :: State Symbol n) ('[] :: [ExprTok]) (_1 :: [Expr a]) = 'Reply ('Err (Error1 "badly formed expression") :: Result Symbol n (Expr a)) sPrev |
type family PExprEndPopOp (sPrev :: State Symbol n) (s :: State Symbol n) (ops :: [ExprTok]) (exprs :: [Expr a]) (op :: BOp) :: Reply Symbol n (Expr a) where ... Source #
Equations
PExprEndPopOp (sPrev :: State Symbol n) (s :: State Symbol n) ops (r ': (l ': exprs) :: [Expr a]) bop = PExprEnd sPrev s ops ('EBOp bop l r ': exprs) | |
PExprEndPopOp (sPrev :: State Symbol n) (s :: State Symbol n) ops (exprs :: [Expr a]) bop = 'Reply ('Err (Error1 "badly formed expression") :: Result Symbol n (Expr a)) sPrev |
type family PExprCh (sPrev :: PState) (s :: PState) (ops :: [ExprTok]) (exprs :: [Expr Natural]) (ch :: Char) :: PReply (Expr Natural) where ... Source #
Equations
PExprCh sPrev s ops exprs ' ' = PExprNext s ops exprs (UnconsState s) | |
PExprCh sPrev s ops exprs ch = PExprELit sPrev s ops exprs ch (ParseDigitDecSym @@ ch) |
type family PExprELit (sPrev :: PState) (s :: PState) (ops :: [ExprTok]) (exprs :: [Expr Natural]) (ch :: Char) (mDigit :: Maybe Natural) :: PReply (Expr Natural) where ... Source #
Equations
PExprELit sPrev s ops exprs _ch ('Just digit) = PExprELitEnd ops exprs (While IsDecDigitSym (NatBase1 10 ParseDigitDecSym digit) @@ s) | |
PExprELit sPrev s ops exprs ch ('Nothing :: Maybe Natural) = PExprEBOp sPrev s ops exprs ch (PExprEBOpOpCh ch) |
type family PExprELitEnd (ops :: [ExprTok]) (exprs :: [Expr Natural]) (res :: PReply Natural) :: PReply (Expr Natural) where ... Source #
type family PExprEBOp (sPrev :: PState) (s :: PState) (ops :: [ExprTok]) (exprs :: [Expr Natural]) (ch :: Char) (mbop :: Maybe ExprTok) :: PReply (Expr Natural) where ... Source #
Equations
PExprEBOp sPrev s ops exprs ch ('Just ('TokBOp bop)) = PExprEBOp' sPrev s bop (BOpPrec bop) exprs ops | |
PExprEBOp sPrev s ops exprs ch ('Just 'TokParenL) = PExprNext sPrev ('TokParenL ': ops) exprs (UnconsState s) | |
PExprEBOp sPrev s ops exprs ch ('Just 'TokParenR) = PExprParenRStart sPrev s exprs ops | |
PExprEBOp sPrev s ops exprs ch ('Nothing :: Maybe ExprTok) = 'Reply ('Err (Error1 "bad expression, expected digit or operator") :: Result Symbol Natural (Expr Natural)) sPrev |
type family PExprParenRStart (sPrev :: PState) (s :: PState) (exprs :: [Expr Natural]) (ops :: [ExprTok]) :: PReply (Expr Natural) where ... Source #
Equations
PExprParenRStart sPrev s exprs ('TokParenL ': ops) = 'Reply ('Err (Error1 "invalid bracket syntax (empty brackets, or otherwise bad)") :: Result Symbol Natural (Expr Natural)) sPrev | |
PExprParenRStart sPrev s exprs ops = PExprParenR sPrev s exprs ops |
type family PExprParenR (sPrev :: PState) (s :: PState) (exprs :: [Expr Natural]) (ops :: [ExprTok]) :: PReply (Expr Natural) where ... Source #
Equations
PExprParenR sPrev s exprs ('TokBOp bop ': ops) = PExprParenRPopBOp sPrev s bop ops exprs | |
PExprParenR sPrev s exprs ('TokParenL ': ops) = PExprNext sPrev ops exprs (UnconsState s) | |
PExprParenR sPrev s exprs ops = 'Reply ('Err (Error1 "badly formed expression") :: Result Symbol Natural (Expr Natural)) sPrev |
type family PExprParenRPopBOp (sPrev :: PState) (s :: PState) (bop :: BOp) (ops :: [ExprTok]) (exprs :: [Expr Natural]) :: PReply (Expr Natural) where ... Source #
Equations
PExprParenRPopBOp sPrev s bop ops (r ': (l ': exprs)) = PExprParenR sPrev s ('EBOp bop l r ': exprs) ops | |
PExprParenRPopBOp sPrev s bop ops exprs = 'Reply ('Err (Error1 "badly formed expression") :: Result Symbol Natural (Expr Natural)) sPrev |
type family PExprEBOpOpCh (ch :: Char) :: Maybe ExprTok where ... Source #
Equations
PExprEBOpOpCh '+' = 'Just ('TokBOp 'Add) | |
PExprEBOpOpCh '-' = 'Just ('TokBOp 'Sub) | |
PExprEBOpOpCh '*' = 'Just ('TokBOp 'Mul) | |
PExprEBOpOpCh '/' = 'Just ('TokBOp 'Div) | |
PExprEBOpOpCh '(' = 'Just 'TokParenL | |
PExprEBOpOpCh ')' = 'Just 'TokParenR | |
PExprEBOpOpCh _1 = 'Nothing :: Maybe ExprTok |
type family PExprEBOp' (sPrev :: PState) (s :: PState) (op :: BOp) (prec :: Natural) (exprs :: [Expr Natural]) (ops :: [ExprTok]) :: PReply (Expr Natural) where ... Source #
Equations
PExprEBOp' sPrev s op prec exprs ('TokBOp opPrev ': ops) = IfNatLte prec (BOpPrec opPrev) (PExprEBOpPop sPrev s op prec opPrev ops exprs) (PExprNext sPrev ('TokBOp op ': ('TokBOp opPrev ': ops)) exprs (UnconsState s)) | |
PExprEBOp' sPrev s op prec exprs ('[] :: [ExprTok]) = PExprNext s '['TokBOp op] exprs (UnconsState s) | |
PExprEBOp' sPrev s op prec exprs ('TokParenL ': ops) = PExprNext sPrev ('TokBOp op ': ('TokParenL ': ops)) exprs (UnconsState s) | |
PExprEBOp' sPrev s op prec exprs ('TokParenR ': ops) = PExprNext sPrev ('TokBOp op ': ('TokParenR ': ops)) exprs (UnconsState s) |
type family PExprEBOpPop (sPrev :: PState) (s :: PState) (op :: BOp) (prec :: Natural) (opPrev :: BOp) (ops :: [ExprTok]) (exprs :: [Expr Natural]) :: PReply (Expr Natural) where ... Source #
Equations
PExprEBOpPop sPrev s op prec opPrev ops (r ': (l ': exprs)) = PExprEBOp' sPrev s op prec ('EBOp opPrev l r ': exprs) ops | |
PExprEBOpPop sPrev s op prec opPrev ops exprs = 'Reply ('Err (Error1 "badly formed expression") :: Result Symbol Natural (Expr Natural)) sPrev |