jon.recoil.org

Source file monomorphize_intf.ml

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
open! Stdppx
open! Import

module Definitions = struct
  (** A subset of [Ast_traverse.map_with_context]. We can expose more as needed, however
      not all methods from that class make good entry points to our implementation.

      Be sure to check the implementation before exposing more entry points here. *)
  class type ['ctx] t = object
    method core_type : 'ctx -> core_type -> core_type
    method expression : 'ctx -> expression -> expression
    method module_expr : 'ctx -> module_expr -> module_expr
    method module_type : 'ctx -> module_type -> module_type
    method pattern : 'ctx -> pattern -> pattern
    method signature : 'ctx -> signature -> signature

    method signature_item_inline :
      'ctx -> signature_item -> signature_item Nonempty_list.t

    method signature_items : 'ctx -> signature_item list -> signature_item list
    method structure : 'ctx -> structure -> structure

    method structure_item_inline :
      'ctx -> structure_item -> structure_item Nonempty_list.t
  end
end

module type Monomorphize = sig
  include module type of struct
    include Definitions
  end

  module Context : sig
    type t

    val top : t
  end

  (** Perform the main [ppx_template] expansion over the ast. See [t_inline] below for
      explanation of [no_inline] suffix. *)
  val t : Context.t t
end