build: ghcid: run even with warnings
[haskell/symantic-parser.git] / src / Symantic / Parser / Machine.hs
index 9ce9594bdcd9ce8e1e363ae5be895e7f31f4254b..3d638dee1e18f461411fb89bdc48e6d174cf0e55 100644 (file)
@@ -1,40 +1,31 @@
 module Symantic.Parser.Machine
   ( module Symantic.Parser.Machine
-  , module Symantic.Parser.Machine.Build
   , module Symantic.Parser.Machine.Generate
   , module Symantic.Parser.Machine.Input
   , module Symantic.Parser.Machine.Instructions
   , module Symantic.Parser.Machine.Optimize
+  , module Symantic.Parser.Machine.Program
   , module Symantic.Parser.Machine.View
   ) where
+
+import System.IO (IO)
 import Data.Function ((.))
-import Data.Ord (Ord)
-import Text.Show (Show)
-import qualified Language.Haskell.TH.Syntax as TH
 
 import Symantic.Parser.Grammar
-import Symantic.Parser.Machine.Build
 import Symantic.Parser.Machine.Generate
 import Symantic.Parser.Machine.Input
 import Symantic.Parser.Machine.Instructions
 import Symantic.Parser.Machine.Optimize
+import Symantic.Parser.Machine.Program
 import Symantic.Parser.Machine.View
 
--- * Type 'Parser'
-type Parser inp = ParserRepr Gen inp
-
--- | Like a 'Parser' but not bound to the 'Gen' interpreter.
-type ParserRepr repr inp =
-  ObserveSharing TH.Name
-                 (OptimizeGrammar (Machine repr inp))
+-- * Type 'Machine'
+type Machine repr inp = Grammar (Program repr inp)
 
 -- | Build a 'Machine' able to 'generateCode' for the given 'Parser'.
 machine :: forall inp repr a.
-  Ord (InputToken inp) =>
-  Show (InputToken inp) =>
-  TH.Lift (InputToken inp) =>
-  Grammar (InputToken inp) (Machine repr inp) =>
-  Executable (InputToken inp) repr =>
-  ParserRepr repr inp a ->
-  repr inp '[] ('Succ 'Zero) a
+  Grammarable (InputToken inp) (Program repr inp) =>
+  Machinable (InputToken inp) repr =>
+  Machine repr inp a ->
+  IO (repr inp '[] a)
 machine = optimizeMachine . grammar @(InputToken inp)