anchor.diff:                      (separate_map (str ", ")
                           (fun (x,_) -> doc_of_tycon x)
                           tys) ])
  -  | Val(_, i, _) -> (str "val ") ^^ (str i.idText)
  -  | Exception(i, _) -> (str "exception ") ^^ (str i.idText)
  +  | Val(_, i, _) -> concat [(str "val "); (str i.idText)]
  +  | Exception(i, _) -> concat [(str "exception "); (str i.idText)]
     | NewEffect(_, DefineEffect(i, _, _, _, _))
  -  | NewEffect(_, RedefineEffect(i, _, _)) -> (str "new_effect) ") ^^ (str i.idText)
  +  | NewEffect(_, RedefineEffect(i, _, _)) -> concat [(str "new_effect) "); (str i.idText)]
     | NewEffectForFree(_, DefineEffect(i, _, _, _, _))
  -  | NewEffectForFree(_, RedefineEffect(i, _, _)) -> (str "new_effect_for_free ") ^^ (str i.idText)
  +  | NewEffectForFree(_, RedefineEffect(i, _, _)) -> concat [(str "new_effect_for_free "); (str i.idText)]
     | SubEffect _ -> str "sub_effect"
     | Pragma _ -> str "pragma"
     | Fsdoc _ -> str "fsdoc"
  
positive.code:                     str "exists"; space;
                      separate_map space doc_of_binder bs; 
                      dot; lbrace; colon; str "pattern"; space;
                      separate_map (str " \/ ") (separate_map (semi ^^ space) doc_of_term) pats;
                      rbrace; space;
                      doc_of_term t])
  
  
negative.code:         group (brackets (concat [(str "labeled"); space; (str l); (doc_of_term t)]))
    | Const c -> group (doc_of_const c)
    | Op(s, xs) -> 
          group (concat [(str s); (brackets (separate_map (str ", ") doc_of_term xs))])
    | Tvar id -> group (str id.idText)
    | Var l
    | Name l -> group (str l.str)
    | Construct (l, args) ->
          group (brackets (
                  concat [(str l.str); space; 
                          (separate_map space (fun (a,imp) -> concat [(doc_of_imp imp); (doc_of_term a)]) args)]))
    | Abs(pats, t) ->
          group (brackets (
                  concat [(str "fun"); space; 
  