method with_constraint =
fun f wc ->
let () = o#node f wc Ast.loc_of_with_constr
in
match wc with
| Ast.WcNil _ -> ()
| Ast.WcTyp (_, t1, t2) ->
pp f "@[<2>type@ %a =@ %a@]" o#ctyp t1 o#ctyp t2
| Ast.WcMod (_, i1, i2) ->
pp f "@[<2>module@ %a =@ %a@]" o#ident i1 o#ident
i2
| Ast.WcTyS (_, t1, t2) ->
pp f "@[<2>type@ %a :=@ %a@]" o#ctyp t1 o#ctyp t2
| Ast.WcMoS (_, i1, i2) ->
pp f "@[<2>module@ %a :=@ %a@]" o#ident i1
o#ident i2
| Ast.WcAnd (_, wc1, wc2) ->
(o#with_constraint f wc1;
pp f o#andsep;
o#with_constraint f wc2)
| Ast.WcAnt (_, s) -> o#anti f s