Module Ask.Bag

Bags specification language.

Bags are multisets of values (rows).

TODO

type 'a order

The type for order effects.

type unordered = unit order

The type for unordered.

type ('a, 'e) t

The type for bags, multisets of values o type 'a and an effect 'e that can be applied on it.

Bag construction

val empty : ('a'e) t

empty is the empty bag.

val yield : 'a value -> ('aunordered) t

yield v is the bag with value v.

val union : ('a'e) t -> ('a'e) t -> ('a'e) t

union b0 b1 has the values of b0 and those of b1.

val table : 'a Table.t -> ('aunordered) t

table t is a table from t.

Transforming and filtering

val foreach : ('a_) t -> ('a value -> ('b'e) t) -> ('b'e) t

foreach b f are the values of b mapped by f and unioned.

val where : bool value -> ('a'e) t -> ('a'e) t

where c e is the bag e () if b whenever c is true.

Predicates

val exists : ('a_) t -> bool value

exists b is true if b is non-empty.

val pp : Stdlib.Format.formatter -> ('a_) t -> unit

Projections

XXX. Fundamentaly this has nothing to do here.

val proj : 'r value -> ('r'a) Col.t -> 'a value
val row : ('a -> 'r) -> ('a -> 'r) value
val inj : 'a -> 'a value
val tuple : ('a -> 'b) value -> 'a value -> 'b value
val const : 'a Type.t -> 'a -> 'a value