aboutsummaryrefslogtreecommitdiff
path: root/lib/checks/check.mli
blob: 321b67bddcdd8305b4503d3fae0870e3cccfb723 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
(** This module is a meta-checker. It will take many checkers and aggregate
    their result together before providing an unified result. 

    The modules required to be declared before being used, using the [build]
    method, and provided as an array :

    {[ 
    let _, e1 = build (module …)
    let _, e2 = build (module …)
    
    module Check = Make (struct
      let t = [| e1; e2 |]
    end)
    ]}
*)

module Id : sig
  type 'a t
  (** The type created on-the-fly. *)
end

type t =
  | E : {
      module_ :
        (module Qsp_syntax.S.Analyzer
           with type Expression.t = 'a
            and type Expression.t' = 'b
            and type Instruction.t = 'c
            and type Instruction.t' = 'd
            and type Location.t = 'e
            and type context = 'f);
      expr_witness : 'a Id.t;
      expr' : 'b Id.t;
      instr_witness : 'c Id.t;
      instr' : 'd Id.t;
      location_witness : 'e Id.t;
      context : 'f Id.t;
    }
      -> t  (** Type of check to apply *)

val build :
  (module Qsp_syntax.S.Analyzer
     with type Expression.t = _
      and type Expression.t' = _
      and type Instruction.t = _
      and type Instruction.t' = _
      and type Location.t = 'a
      and type context = _) ->
  'a Id.t * t
(** Build a new check from a module following S.Analyzer signature. 
ypeid 
    Return the result type which hold the final result value, and checker
    itself. *)

val get_module : t -> (module Qsp_syntax.S.Analyzer)

type result

val get : 'a Id.t -> result -> 'a option
(** The method [get] can be used to get the internal value for one of the
    checker used.
 *)

module Make (A : sig
  val t : t array
end) : sig
  include Qsp_syntax.S.Analyzer with type Location.t = result array
end
[@@warning "-67"]