{-# LANGUAGE ImplicitParams, PatternSynonyms #-}
module Parsley.Internal (
module Core,
module Primitives,
module THUtils,
module Trace,
module Backend,
parse, parseWithOpts
) where
import Parsley.Internal.Backend (codeGen, eval)
import Parsley.Internal.Frontend (compile)
import Parsley.Internal.Backend as Backend (
Input,
)
import Parsley.Internal.Core as Core
import Parsley.Internal.Core.Primitives as Primitives (
pure, (<*>), (*>), (<*),
(<|>), empty,
satisfy, lookAhead, try, notFollowedBy,
loop,
Reg, newRegister, get, put,
conditional, branch,
line, col,
debug
)
import Parsley.Internal.Common.Utils as THUtils (Quapplicative(..), WQ, Code, makeQ)
import Parsley.Internal.Trace as Trace (Trace(trace))
import qualified Parsley.Internal.Opt as Opt
parse :: (Trace, Input input) => Parser a -> Code (input -> Maybe a)
parse :: forall input a.
(Trace, Input input) =>
Parser a -> Code (input -> Maybe a)
parse = forall input a.
(Trace, Input input) =>
Flags -> Parser a -> Code (input -> Maybe a)
parseWithOpts Flags
Opt.fast
parseWithOpts :: (Trace, Input input) => Opt.Flags -> Parser a -> Code (input -> Maybe a)
parseWithOpts :: forall input a.
(Trace, Input input) =>
Flags -> Parser a -> Code (input -> Maybe a)
parseWithOpts Flags
_flags Parser a
p =
let ?flags = Flags
_flags
in [||\input -> $$(eval [||input||] (compile (try p) codeGen))||]