diff --git a/haskell-experiments/src/Datalog/DatalogDB.hs b/haskell-experiments/src/Datalog/DatalogDB.hs index 5f7aaa2..1d07f68 100644 --- a/haskell-experiments/src/Datalog/DatalogDB.hs +++ b/haskell-experiments/src/Datalog/DatalogDB.hs @@ -23,4 +23,5 @@ class DatalogDB db where emptyDB :: db lookupRelation :: db -> Text -> Maybe Relation insertRelation :: db -> Relation -> db - addRule :: (Literal, [Literal]) -> db -> db \ No newline at end of file + addRule :: (Literal, [Literal]) -> db -> db + addConstants :: db -> Set Constant -> db \ No newline at end of file diff --git a/haskell-experiments/src/Datalog/NaiveDatabase.hs b/haskell-experiments/src/Datalog/NaiveDatabase.hs index ef38eb2..c62e07b 100644 --- a/haskell-experiments/src/Datalog/NaiveDatabase.hs +++ b/haskell-experiments/src/Datalog/NaiveDatabase.hs @@ -63,6 +63,12 @@ instance DatalogDB NaiveDatabase where relationMap' = Map.insert relationName relation' relationMap constants' = constants db' + addConstants :: NaiveDatabase -> Set Constant -> NaiveDatabase + addConstants db newConstants = + db { + constants = Set.union newConstants (constants db) + } + lookupRelation0 :: DatalogDB db => Text -> db -> Int -> Set [Constant] -> Relation lookupRelation0 relationName db newArity tuples = case lookupRelation db relationName of @@ -139,6 +145,7 @@ digestHead db relation (Literal neg relationName terms) = headTermToElement (Var name) = RuleElementVariable $ lookupVariable name variableNames headTermToElement constant = RuleElementConstant constant + -- db' = insertRelation db relation relationMap :: Map RelationId Relation = relations db relationMap' = Map.insert relationName relation relationMap extraVariables = headTermToElement <$> terms