1use super::*;
2
3#[derive(Clone, Debug, PartialEq)]
4pub struct Program {
5 pub datas: HashMap<Ident, DataDecl>,
6 pub preds: HashMap<Ident, PredDecl>,
7 pub querys: Vec<QueryDecl>,
8}
9
10#[derive(Clone, Debug, PartialEq)]
11pub enum Goal {
12 Lit(bool),
13 Eq(TermId, TermId),
14 Prim(Prim, Vec<AtomId>),
15 And(Vec<Goal>),
16 Or(Vec<Goal>),
17 Call(Ident, Vec<TypeId>, Vec<TermId>),
18}
19
20#[derive(Clone, Debug, PartialEq)]
21pub struct DataDecl {
22 pub name: Ident,
23 pub polys: Vec<Ident>,
24 pub cons: Vec<Constructor>,
25}
26
27#[derive(Clone, Debug, PartialEq)]
28pub struct Constructor {
29 pub name: Ident,
30 pub flds: Vec<TypeId>,
31}
32
33#[derive(Clone, Debug, PartialEq)]
34pub struct PredDecl {
35 pub name: Ident,
36 pub polys: Vec<Ident>,
37 pub pars: Vec<(Ident, TypeId)>,
38 pub vars: Vec<(Ident, TypeId)>,
39 pub goal: Goal,
40}
41
42#[derive(Clone, Debug, PartialEq)]
43pub struct QueryDecl {
44 pub entry: Ident,
45 pub params: Vec<QueryParam>,
46}
47
48#[derive(Clone, Debug, PartialEq)]
49pub enum QueryParam {
50 DepthStep(usize),
51 DepthLimit(usize),
52 AnswerLimit(usize),
53 AnswerPause(bool),
54}