symantic-parser-0.0.0.20210101: src/Symantic/Parser/Machine.hs
module Symantic.Parser.Machine
( module Symantic.Parser.Machine
, module Symantic.Parser.Machine.Instructions
, module Symantic.Parser.Machine.Dump
, module Symantic.Parser.Machine.Generate
, module Symantic.Parser.Machine.Input
) where
import Data.Function ((.))
import Data.Ord (Ord)
import Symantic.Parser.Machine.Input
import Symantic.Parser.Grammar
import Text.Show (Show)
import qualified Language.Haskell.TH.Syntax as TH
import Symantic.Parser.Machine.Instructions
import Symantic.Parser.Machine.Dump
import Symantic.Parser.Machine.Generate
-- * Type 'Parser'
type Parser inp =
ObserveSharing TH.Name
(OptimizeComb TH.Name
(Machine inp))
machine :: forall inp repr a.
Ord (InputToken inp) =>
Show (InputToken inp) =>
TH.Lift (InputToken inp) =>
-- InputToken inp ~ Char =>
Executable repr =>
Readable repr (InputToken inp) =>
Grammar (Machine inp) =>
Parser inp a ->
repr inp '[] ('Succ 'Zero) a
machine = runMachine . optimizeComb . observeSharing