packages feed

hydra-ext-0.17.4: src/main/haskell/Hydra/Datalog/Syntax.hs

-- Note: this is an automatically generated file. Do not edit.

-- | A basic Datalog model

module Hydra.Datalog.Syntax where

import qualified Hydra.Core as Core
import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.Scientific as Sci

-- | A relation applied to a list of terms
data Atom =
  Atom {
    atomRelation :: Relation,
    atomTermList :: TermList}
  deriving (Eq, Ord, Read, Show)

_Atom = Core.Name "hydra.datalog.syntax.Atom"

_Atom_Relation = Core.Name "Relation"

_Atom_TermList = Core.Name "TermList"

-- | A nonempty, comma-separated list of atoms
data AtomList =
  AtomListSingle Atom |
  AtomListMany AtomListMultiple
  deriving (Eq, Ord, Read, Show)

_AtomList = Core.Name "hydra.datalog.syntax.AtomList"

_AtomList_single = Core.Name "single"

_AtomList_many = Core.Name "many"

-- | An atom followed by the remainder of a comma-separated atom list
data AtomListMultiple =
  AtomListMultiple {
    atomListMultipleAtom :: Atom,
    atomListMultipleAtomList :: AtomList}
  deriving (Eq, Ord, Read, Show)

_AtomListMultiple = Core.Name "hydra.datalog.syntax.AtomListMultiple"

_AtomListMultiple_Atom = Core.Name "Atom"

_AtomListMultiple_AtomList = Core.Name "AtomList"

-- | A constant term, e.g. an atomic value such as a symbol or number
newtype Constant =
  Constant {
    unConstant :: String}
  deriving (Eq, Ord, Read, Show)

_Constant = Core.Name "hydra.datalog.syntax.Constant"

-- | A nonempty, comma-separated list of constants
data ConstantList =
  ConstantListSingle Constant |
  ConstantListMany ConstantListMultiple
  deriving (Eq, Ord, Read, Show)

_ConstantList = Core.Name "hydra.datalog.syntax.ConstantList"

_ConstantList_single = Core.Name "single"

_ConstantList_many = Core.Name "many"

-- | A constant followed by the remainder of a comma-separated constant list
data ConstantListMultiple =
  ConstantListMultiple {
    constantListMultipleConstant :: Constant,
    constantListMultipleConstantList :: ConstantList}
  deriving (Eq, Ord, Read, Show)

_ConstantListMultiple = Core.Name "hydra.datalog.syntax.ConstantListMultiple"

_ConstantListMultiple_Constant = Core.Name "Constant"

_ConstantListMultiple_ConstantList = Core.Name "ConstantList"

-- | An unconditional assertion of a relation applied to a list of constants
data Fact =
  Fact {
    factRelation :: Relation,
    factConstantList :: ConstantList}
  deriving (Eq, Ord, Read, Show)

_Fact = Core.Name "hydra.datalog.syntax.Fact"

_Fact_Relation = Core.Name "Relation"

_Fact_ConstantList = Core.Name "ConstantList"

-- | A Datalog program: a list of facts and rules
newtype Program =
  Program {
    unProgram :: [ProgramElmt]}
  deriving (Eq, Ord, Read, Show)

_Program = Core.Name "hydra.datalog.syntax.Program"

-- | A single element of a Datalog program: either a fact or a rule
data ProgramElmt =
  ProgramElmtFact Fact |
  ProgramElmtRule Rule
  deriving (Eq, Ord, Read, Show)

_ProgramElmt = Core.Name "hydra.datalog.syntax.ProgramElmt"

_ProgramElmt_Fact = Core.Name "Fact"

_ProgramElmt_Rule = Core.Name "Rule"

-- | The name of a predicate (relation) used in facts, rules, and queries
newtype Relation =
  Relation {
    unRelation :: String}
  deriving (Eq, Ord, Read, Show)

_Relation = Core.Name "hydra.datalog.syntax.Relation"

-- | A conditional assertion: a head atom implied by a conjunction of body atoms
data Rule =
  Rule {
    ruleAtom :: Atom,
    ruleAtomList :: AtomList}
  deriving (Eq, Ord, Read, Show)

_Rule = Core.Name "hydra.datalog.syntax.Rule"

_Rule_Atom = Core.Name "Atom"

_Rule_AtomList = Core.Name "AtomList"

-- | An argument to an atom: either a constant or a variable
data Term =
  TermConstant Constant |
  TermVariable Variable
  deriving (Eq, Ord, Read, Show)

_Term = Core.Name "hydra.datalog.syntax.Term"

_Term_Constant = Core.Name "Constant"

_Term_Variable = Core.Name "Variable"

-- | A nonempty, comma-separated list of terms
data TermList =
  TermListSingle Term |
  TermListMany TermListMultiple
  deriving (Eq, Ord, Read, Show)

_TermList = Core.Name "hydra.datalog.syntax.TermList"

_TermList_single = Core.Name "single"

_TermList_many = Core.Name "many"

-- | A term followed by the remainder of a comma-separated term list
data TermListMultiple =
  TermListMultiple {
    termListMultipleTerm :: Term,
    termListMultipleTermList :: TermList}
  deriving (Eq, Ord, Read, Show)

_TermListMultiple = Core.Name "hydra.datalog.syntax.TermListMultiple"

_TermListMultiple_Term = Core.Name "Term"

_TermListMultiple_TermList = Core.Name "TermList"

-- | A logic variable, which may be bound to different constants across a query
newtype Variable =
  Variable {
    unVariable :: String}
  deriving (Eq, Ord, Read, Show)

_Variable = Core.Name "hydra.datalog.syntax.Variable"