functor (C : Typed_ast.Exp_context->
  sig
    val expand_defs :
      Typed_ast.def list ->
      (Macro_expander.macro_context -> Typed_ast.exp -> Typed_ast.exp option) *
      (Types.t -> Types.t) * (Types.src_t -> Types.src_t) *
      (Macro_expander.pat_position ->
       Macro_expander.macro_context -> Typed_ast.pat -> Typed_ast.pat option) ->
      Typed_ast.def list
    val expand_pat :
      Macro_expander.macro_context ->
      Macro_expander.pat_position ->
      Typed_ast.pat ->
      (Types.t -> Types.t) * (Types.src_t -> Types.src_t) *
      (Macro_expander.pat_position ->
       Macro_expander.macro_context -> Typed_ast.pat -> Typed_ast.pat option) ->
      Typed_ast.pat
    val expand_exp :
      Macro_expander.macro_context ->
      (Macro_expander.macro_context -> Typed_ast.exp -> Typed_ast.exp option) *
      (Types.t -> Types.t) * (Types.src_t -> Types.src_t) *
      (Macro_expander.pat_position ->
       Macro_expander.macro_context -> Typed_ast.pat -> Typed_ast.pat option) ->
      Typed_ast.exp -> Typed_ast.exp
  end