sig
type (+'t, +'ty) t = private
Yield of 't
| Cases of ('t, 'ty) Model.DT.cases
and ('t, 'ty) cases = {
var : 'ty Var.t;
tests : ('t, 'ty) Model.DT.case list;
default : ('t, 'ty) Model.DT.t option;
}
and ('t, 'ty) case = 't * ('t, 'ty) Model.DT.t
val yield : 't -> ('t, 'a) Model.DT.t
val const : 'ty Var.t list -> ('t, 'ty) Model.DT.t -> ('t, 'ty) Model.DT.t
val cases :
'ty Var.t ->
tests:('t, 'ty) Model.DT.case list ->
default:('t, 'ty) Model.DT.t option -> ('t, 'ty) Model.DT.t
val map :
term:('t1 -> 't2) ->
ty:('ty1 -> 'ty2) -> ('t1, 'ty1) Model.DT.t -> ('t2, 'ty2) Model.DT.t
val filter_map :
test:('ty Var.t -> 't1 -> 't2 option) ->
yield:('t1 -> 't2) -> ('t1, 'ty) Model.DT.t -> ('t2, 'ty) Model.DT.t
val ty_args : ('a, 'ty) Model.DT.t -> 'ty list
val vars : ('a, 'ty) Model.DT.t -> 'ty Var.t list
val num_vars : ('a, 'b) Model.DT.t -> int
val add_default : 't -> ('t, 'ty) Model.DT.t -> ('t, 'ty) Model.DT.t
type ('t, 'ty) flat_test = { ft_var : 'ty Var.t; ft_term : 't; }
type ('t, 'ty) flat_dt = {
fdt_vars : 'ty Var.t list;
fdt_cases : (('t, 'ty) Model.DT.flat_test list * 't) list;
fdt_default : 't option;
}
val mk_flat_test : 'ty Var.t -> 't -> ('t, 'ty) Model.DT.flat_test
val of_flat :
equal:('t -> 't -> bool) ->
hash:('t -> int) -> ('t, 'ty) Model.DT.flat_dt -> ('t, 'ty) Model.DT.t
val flatten : ('t, 'ty) Model.DT.t -> ('t, 'ty) Model.DT.flat_dt
val check_ : ('a, 'b) Model.DT.t -> unit
val print :
't Model.prec_printer ->
'ty Model.printer -> ('t, 'ty) Model.DT.t Model.printer
val print_flat_test :
't Model.prec_printer -> ('t, 'a) Model.DT.flat_test Model.printer
val print_flat :
't Model.prec_printer -> ('t, 'a) Model.DT.flat_dt Model.printer
val to_sexp :
't Model.to_sexp ->
'ty Model.to_sexp -> ('t, 'ty) Model.DT.t Model.to_sexp
end