aboutsummaryrefslogblamecommitdiffstats
path: root/lib/protocols/Generative.mli
blob: 5ada3290cbd51d68bfb234890c916e98dfc27553 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

















                                                                                        

                                                                       




                                                                                               









                                                                                      
type t

(** values fixed for some of a relation's attributes, the attributes
    absent from it being the ones left free. *)
type binding = Concepts.Value.value BatMap.String.t

class type implementation = object
  method modes : (Concepts.Mode.t, Concepts.Condition.condition) result
  method generate : binding -> (Handle.t, Concepts.Condition.condition) result
end

val make : #implementation -> Handle.protocol
val from : Handle.t -> t Handle.interface option
val require : Handle.t -> (t Handle.interface, Concepts.Condition.condition) result
val modes : t Handle.interface -> (Concepts.Mode.t, Concepts.Condition.condition) result

(** a handle carrying a cursor over the members agreeing with the
    binding and under the empty binding this is enumeration, so a
    relation carrying enumerable answers the same members here. Refused
    when no declared mode generates under the attributes bound. *)
val generate : t Handle.interface -> binding -> (Handle.t, Concepts.Condition.condition) result

val nothing : binding
val bound : binding -> Concepts.Mode.attributes
val satisfies : binding -> Concepts.Tuple.t -> bool

(** membership for a relation with no lookup of its own, asked of the
    generator under the binding the tuple fixes. Only a tuple carrying
    exactly the [heading] can be a member, and it must match one whole. *)
class virtual membership : object
  val virtual heading : Concepts.Mode.attributes
  method virtual modes : (Concepts.Mode.t, Concepts.Condition.condition) result
  method virtual generate : binding -> (Handle.t, Concepts.Condition.condition) result
  method contains : Concepts.Tuple.t -> (bool, Concepts.Condition.condition) result
end