Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit dd648ba

Browse files
committed
Explicit lifting.
1 parent bad852b commit dd648ba

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

  • semantic-ast/src/AST/Grammar

semantic-ast/src/AST/Grammar/TH.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ import qualified Data.Set as Set
99
import Foreign.Ptr
1010
import Language.Haskell.TH
1111
import Language.Haskell.TH.Syntax
12-
import TreeSitter.Symbol
1312
import 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.
1717
mkStaticallyKnownRuleGrammarData :: Name -> Ptr Language -> Q [Dec]
1818
mkStaticallyKnownRuleGrammarData 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)]
3030
renameDups = 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

Comments
 (0)