extracting variable names in a rule

This commit is contained in:
Felix Dilke 2026-01-27 17:55:19 +00:00
parent 4b358a8d6f
commit 429d64ee73

View File

@ -17,6 +17,7 @@ import Data.Text (Text)
import Data.Void
import Datalog.DatalogParser (Head (HeadSingle), Literal (..), Statement (..), Term (..), parseDatalog)
import Text.Megaparsec (ParseErrorBundle)
import GHC.TypeError (ErrorMessage(Text))
data Value
= ValueInt Int
@ -104,8 +105,8 @@ data BodyConstraint = BodyConstraint
data RuleContext = RuleContext
{ __relation :: Relation
, -- _variableNames :: [Text],
_headEntries :: [RuleElement]
, _variableNames :: [Text]
, _headEntries :: [RuleElement]
, _bodyConstraints :: [BodyConstraint]
, _db :: NaiveDatabase
}
@ -128,6 +129,7 @@ withFactsAndRules facts =
digestHead db relation (Literal neg relationName terms) =
RuleContext
{ __relation = relation
, _variableNames = extractVariableNames terms
, _headEntries = variables'
, _bodyConstraints = []
, _db = NaiveDatabase relationMap' constants'
@ -143,6 +145,7 @@ withFactsAndRules facts =
digestBody context (Literal neg subRelationName terms) =
RuleContext
{ __relation = relation
, _variableNames = _variableNames context
, _headEntries = variables'
, _bodyConstraints = constraints'
, _db = NaiveDatabase relationMap' constants'
@ -211,6 +214,11 @@ withFactsAndRules facts =
toElement :: Term -> RuleElement
toElement (Var name) = RuleElementVariable name
toElement constant = RuleElementConstant constant
extractVariableNames :: [Term] -> [Text]
extractVariableNames = mapMaybe extractVariableName where
extractVariableName :: Term -> Maybe Text
extractVariableName (Var name) = Just name
extractVariableName _ = Nothing
query :: NaiveDatabase -> Text -> Text
query db qText =