-- | A model for path- and pattern-based graph constraints, which may be considered as part of the schema of a graph

module Hydra.Constraints where

import qualified Hydra.Core as Core
import qualified Hydra.Query as Query
import Data.Int
import Data.List as L
import Data.Map as M
import Data.Set as S

-- | A declared equivalence between two abstract paths in a graph
data PathEquation = 
  PathEquation {
    PathEquation -> Path
pathEquationLeft :: Query.Path,
    PathEquation -> Path
pathEquationRight :: Query.Path}
  deriving (PathEquation -> PathEquation -> Bool
(PathEquation -> PathEquation -> Bool)
-> (PathEquation -> PathEquation -> Bool) -> Eq PathEquation
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PathEquation -> PathEquation -> Bool
== :: PathEquation -> PathEquation -> Bool
$c/= :: PathEquation -> PathEquation -> Bool
/= :: PathEquation -> PathEquation -> Bool
Eq, Eq PathEquation
Eq PathEquation =>
(PathEquation -> PathEquation -> Ordering)
-> (PathEquation -> PathEquation -> Bool)
-> (PathEquation -> PathEquation -> Bool)
-> (PathEquation -> PathEquation -> Bool)
-> (PathEquation -> PathEquation -> Bool)
-> (PathEquation -> PathEquation -> PathEquation)
-> (PathEquation -> PathEquation -> PathEquation)
-> Ord PathEquation
PathEquation -> PathEquation -> Bool
PathEquation -> PathEquation -> Ordering
PathEquation -> PathEquation -> PathEquation
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PathEquation -> PathEquation -> Ordering
compare :: PathEquation -> PathEquation -> Ordering
$c< :: PathEquation -> PathEquation -> Bool
< :: PathEquation -> PathEquation -> Bool
$c<= :: PathEquation -> PathEquation -> Bool
<= :: PathEquation -> PathEquation -> Bool
$c> :: PathEquation -> PathEquation -> Bool
> :: PathEquation -> PathEquation -> Bool
$c>= :: PathEquation -> PathEquation -> Bool
>= :: PathEquation -> PathEquation -> Bool
$cmax :: PathEquation -> PathEquation -> PathEquation
max :: PathEquation -> PathEquation -> PathEquation
$cmin :: PathEquation -> PathEquation -> PathEquation
min :: PathEquation -> PathEquation -> PathEquation
Ord, ReadPrec [PathEquation]
ReadPrec PathEquation
Int -> ReadS PathEquation
ReadS [PathEquation]
(Int -> ReadS PathEquation)
-> ReadS [PathEquation]
-> ReadPrec PathEquation
-> ReadPrec [PathEquation]
-> Read PathEquation
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS PathEquation
readsPrec :: Int -> ReadS PathEquation
$creadList :: ReadS [PathEquation]
readList :: ReadS [PathEquation]
$creadPrec :: ReadPrec PathEquation
readPrec :: ReadPrec PathEquation
$creadListPrec :: ReadPrec [PathEquation]
readListPrec :: ReadPrec [PathEquation]
Read, Int -> PathEquation -> ShowS
[PathEquation] -> ShowS
PathEquation -> String
(Int -> PathEquation -> ShowS)
-> (PathEquation -> String)
-> ([PathEquation] -> ShowS)
-> Show PathEquation
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PathEquation -> ShowS
showsPrec :: Int -> PathEquation -> ShowS
$cshow :: PathEquation -> String
show :: PathEquation -> String
$cshowList :: [PathEquation] -> ShowS
showList :: [PathEquation] -> ShowS
Show)

_PathEquation :: Name
_PathEquation = (String -> Name
Core.Name String
"hydra/constraints.PathEquation")

_PathEquation_left :: Name
_PathEquation_left = (String -> Name
Core.Name String
"left")

_PathEquation_right :: Name
_PathEquation_right = (String -> Name
Core.Name String
"right")

-- | A pattern which, if it matches in a given graph, implies that another pattern must also match. Query variables are shared between the two patterns.
data PatternImplication = 
  PatternImplication {
    PatternImplication -> Pattern
patternImplicationAntecedent :: Query.Pattern,
    PatternImplication -> Pattern
patternImplicationConsequent :: Query.Pattern}
  deriving (PatternImplication -> PatternImplication -> Bool
(PatternImplication -> PatternImplication -> Bool)
-> (PatternImplication -> PatternImplication -> Bool)
-> Eq PatternImplication
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PatternImplication -> PatternImplication -> Bool
== :: PatternImplication -> PatternImplication -> Bool
$c/= :: PatternImplication -> PatternImplication -> Bool
/= :: PatternImplication -> PatternImplication -> Bool
Eq, Eq PatternImplication
Eq PatternImplication =>
(PatternImplication -> PatternImplication -> Ordering)
-> (PatternImplication -> PatternImplication -> Bool)
-> (PatternImplication -> PatternImplication -> Bool)
-> (PatternImplication -> PatternImplication -> Bool)
-> (PatternImplication -> PatternImplication -> Bool)
-> (PatternImplication -> PatternImplication -> PatternImplication)
-> (PatternImplication -> PatternImplication -> PatternImplication)
-> Ord PatternImplication
PatternImplication -> PatternImplication -> Bool
PatternImplication -> PatternImplication -> Ordering
PatternImplication -> PatternImplication -> PatternImplication
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: PatternImplication -> PatternImplication -> Ordering
compare :: PatternImplication -> PatternImplication -> Ordering
$c< :: PatternImplication -> PatternImplication -> Bool
< :: PatternImplication -> PatternImplication -> Bool
$c<= :: PatternImplication -> PatternImplication -> Bool
<= :: PatternImplication -> PatternImplication -> Bool
$c> :: PatternImplication -> PatternImplication -> Bool
> :: PatternImplication -> PatternImplication -> Bool
$c>= :: PatternImplication -> PatternImplication -> Bool
>= :: PatternImplication -> PatternImplication -> Bool
$cmax :: PatternImplication -> PatternImplication -> PatternImplication
max :: PatternImplication -> PatternImplication -> PatternImplication
$cmin :: PatternImplication -> PatternImplication -> PatternImplication
min :: PatternImplication -> PatternImplication -> PatternImplication
Ord, ReadPrec [PatternImplication]
ReadPrec PatternImplication
Int -> ReadS PatternImplication
ReadS [PatternImplication]
(Int -> ReadS PatternImplication)
-> ReadS [PatternImplication]
-> ReadPrec PatternImplication
-> ReadPrec [PatternImplication]
-> Read PatternImplication
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS PatternImplication
readsPrec :: Int -> ReadS PatternImplication
$creadList :: ReadS [PatternImplication]
readList :: ReadS [PatternImplication]
$creadPrec :: ReadPrec PatternImplication
readPrec :: ReadPrec PatternImplication
$creadListPrec :: ReadPrec [PatternImplication]
readListPrec :: ReadPrec [PatternImplication]
Read, Int -> PatternImplication -> ShowS
[PatternImplication] -> ShowS
PatternImplication -> String
(Int -> PatternImplication -> ShowS)
-> (PatternImplication -> String)
-> ([PatternImplication] -> ShowS)
-> Show PatternImplication
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PatternImplication -> ShowS
showsPrec :: Int -> PatternImplication -> ShowS
$cshow :: PatternImplication -> String
show :: PatternImplication -> String
$cshowList :: [PatternImplication] -> ShowS
showList :: [PatternImplication] -> ShowS
Show)

_PatternImplication :: Name
_PatternImplication = (String -> Name
Core.Name String
"hydra/constraints.PatternImplication")

_PatternImplication_antecedent :: Name
_PatternImplication_antecedent = (String -> Name
Core.Name String
"antecedent")

_PatternImplication_consequent :: Name
_PatternImplication_consequent = (String -> Name
Core.Name String
"consequent")