method module_type =
fun f mt ->
let () = o#node f mt Ast.loc_of_module_type
in
match mt with
| Ast.MtNil _ -> assert false
| Ast.MtId (_, i) -> o#ident f i
| Ast.MtAnt (_, s) -> o#anti f s
| Ast.MtFun (_, s, mt1, mt2) ->
pp f "@[<2>functor@ @[<1>(%a :@ %a)@]@ ->@ %a@]"
o#var s o#module_type mt1 o#module_type mt2
| Ast.MtQuo (_, s) -> pp f "'%a" o#var s
| Ast.MtSig (_, sg) ->
pp f "@[<hv0>@[<hv2>sig@ %a@]@ end@]" o#sig_item sg
| Ast.MtWit (_, mt, wc) ->
pp f "@[<2>%a@ with@ %a@]" o#module_type mt
o#with_constraint wc