method binding =
                  fun f bi ->
                    let () = o#node f bi Ast.loc_of_binding
                    in
                      match bi with
                      | Ast.BiNil _ -> ()
                      | Ast.BiAnd (_, b1, b2) ->
                          (o#binding f b1; pp f o#andsep; o#binding f b2)
                      | Ast.BiEq (_, p, e) ->
                          let (pl, e) =
                            (match p with
                             | Ast.PaTyc (_, _, _) -> ([], e)
                             | _ -> expr_fun_args e)
                          in
                            (match (p, e) with
                             | (Ast.PaId (_, (Ast.IdLid (_, _))),
                                Ast.ExTyc (_, e, t)) ->
                                 pp f "%a :@ %a =@ %a"
                                   (list o#fun_binding "@ ")
                                   ((`patt p) :: pl) o#ctyp t o#expr e
                             | _ ->
                                 pp f "%a @[<0>%a=@]@ %a" o#simple_patt p
                                   (list' o#fun_binding "" "@ ") pl o#expr e)
                      | Ast.BiAnt (_, s) -> o#anti f s