From 136412a4dd2e5281ff74c96a6ec97ab71d6c5157 Mon Sep 17 00:00:00 2001 From: Felix Dilke Date: Fri, 30 Jan 2026 11:07:40 +0000 Subject: [PATCH] digestHead abstracts DatalogDB --- haskell-experiments/src/Datalog/NaiveDatabase.hs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/haskell-experiments/src/Datalog/NaiveDatabase.hs b/haskell-experiments/src/Datalog/NaiveDatabase.hs index 0a7948d..51da4be 100644 --- a/haskell-experiments/src/Datalog/NaiveDatabase.hs +++ b/haskell-experiments/src/Datalog/NaiveDatabase.hs @@ -30,7 +30,7 @@ data NaiveDatabase = NaiveDatabase instance DatalogDB NaiveDatabase where emptyDB :: NaiveDatabase - emptyDB = NaiveDatabase + emptyDB = NaiveDatabase { relations = Map.empty , constants = Set.empty -- the Herbrand universe } @@ -118,15 +118,15 @@ withFacts = newRelationMap = Map.insert relationName newRelation relationMap newConstantSet = Set.union constantSet $ Set.fromList terms -data RuleContext = RuleContext +data (DatalogDB db) => RuleContext db = RuleContext { __relation :: Relation , _variableNames :: [Text] , _headEntries :: [RuleElement] , _bodyConstraints :: [BodyConstraint] - , _db :: NaiveDatabase + , _db :: db } -digestHead :: NaiveDatabase -> Relation -> Literal -> RuleContext +digestHead :: forall db . (DatalogDB db) => db -> Relation -> Literal -> RuleContext db digestHead db relation (Literal neg relationName terms) = RuleContext { __relation = relation @@ -147,7 +147,7 @@ digestHead db relation (Literal neg relationName terms) = extractConstant :: RuleElement -> Maybe Constant extractConstant (RuleElementConstant constant) = Just constant extractConstant _ = Nothing -digestBody :: Literal -> RuleContext -> RuleContext +digestBody :: Literal -> RuleContext NaiveDatabase -> RuleContext NaiveDatabase digestBody (Literal neg subRelationName subTerms) context = context { _variableNames = variableNames