@@ -9,16 +9,16 @@ import qualified Data.Set as Set
99import Foreign.Ptr
1010import Language.Haskell.TH
1111import Language.Haskell.TH.Syntax
12- import TreeSitter.Symbol
1312import TreeSitter.Language (Language , languageSymbols )
13+ import TreeSitter.Symbol
1414
1515-- | TemplateHaskell construction of a datatype for the referenced Language.
1616-- | Statically-known rules corresponding to symbols in the grammar.
1717mkStaticallyKnownRuleGrammarData :: Name -> Ptr Language -> Q [Dec ]
1818mkStaticallyKnownRuleGrammarData name language = do
1919 symbols <- renameDups . map ((,) . fst <*> uncurry symbolToName) . (++ [(Regular , " ParseError" )]) <$> runIO (languageSymbols language)
2020 Module _ modName <- thisModule
21- let mkMatch symbolType str = match (conP (Name (OccName str) (NameQ modName)) [] ) (normalB [e |symbolType|]) []
21+ let mkMatch symbolType str = match (conP (Name (OccName str) (NameQ modName)) [] ) (normalB [e |$(lift symbolType) |]) []
2222 datatype <- dataD (pure [] ) name [] Nothing (flip normalC [] . mkName . snd <$> symbols)
2323 [ derivClause Nothing (map conT [ ''Bounded, ''Enum, ''Eq, ''Ix, ''Ord, ''Show ]) ]
2424 symbolInstance <- [d |
@@ -30,4 +30,4 @@ renameDups :: [(a, String)] -> [(a, String)]
3030renameDups = snd . mapAccumL go mempty
3131 where go done (ty, name) = let name' = rename name in (Set. insert name' done, (ty, name'))
3232 where rename name | name `Set.member` done = rename (name ++ " '" )
33- | otherwise = name
33+ | otherwise = name
0 commit comments