2026-01-30 10:27:26 +00:00
|
|
|
{-# HLINT ignore "Redundant flip" #-}
|
|
|
|
|
{-# LANGUAGE ImportQualifiedPost #-}
|
|
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
|
{-# LANGUAGE ScopedTypeVariables #-}
|
|
|
|
|
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
|
|
|
|
|
|
|
|
|
|
module Datalog.DatalogDB where
|
|
|
|
|
|
|
|
|
|
import Control.Exception.Base
|
|
|
|
|
import Data.List
|
|
|
|
|
import Data.Map (Map)
|
|
|
|
|
import Data.Map qualified as Map
|
|
|
|
|
import Data.Maybe
|
|
|
|
|
import Data.Set (Set)
|
|
|
|
|
import Data.Set qualified as Set
|
|
|
|
|
import Data.Text (Text)
|
|
|
|
|
import Data.Void
|
|
|
|
|
import Datalog.DatalogParser (Head (HeadSingle), Literal (..), Statement (..), Term (..), parseDatalog)
|
|
|
|
|
import Text.Megaparsec (ParseErrorBundle)
|
|
|
|
|
import Datalog.Rules
|
|
|
|
|
|
|
|
|
|
class DatalogDB db where
|
|
|
|
|
emptyDB :: db
|
|
|
|
|
lookupRelation :: db -> Text -> Maybe Relation
|
|
|
|
|
insertRelation :: db -> Relation -> db
|
2026-01-30 12:53:40 +00:00
|
|
|
addFact :: Literal -> db -> db
|
2026-01-30 10:55:19 +00:00
|
|
|
addRule :: (Literal, [Literal]) -> db -> db
|
2026-01-30 12:53:40 +00:00
|
|
|
addConstants :: db -> Set Constant -> db
|
|
|
|
|
|