anchor.diff:    | EAny
     | EAbort
     | EReturn of expr
  -  | EFlat of lident * list<(ident * expr)>
  -  | EField of lident * expr * ident
  +  | EFlat of typ * list<(ident * expr)>
  +  | EField of typ * expr * ident
     | EWhile of expr * expr
     | EBufCreateL of list<expr>
     | ETuple of list<expr>
  -  | ECons of lident * ident * list<expr>
  +  | ECons of typ * ident * list<expr>
     | EBufFill of expr * expr * expr
   
   and op =
  
positive.code:   | MLE_Coerce _ ->
        failwith "todo: translate_expr [MLE_Coerce]"
  
  and assert_lid t =
    match t with
    | MLTY_Named ([], lid) -> lid
    | _ -> failwith "invalid argument: assert_lid"
  
  and translate_branches env branches =
  
negative.code:       ECast (translate_expr env e, translate_type env t_to)
  
    | MLE_Record (_, fields) ->
        EFlat (assert_lid env e.mlty, List.map (fun (field, expr) ->
          field, translate_expr env expr) fields)
  
    | MLE_Proj (e, path) ->
        EField (assert_lid env e.mlty, translate_expr env e, snd path)
  
    | MLE_Let _ ->
        (* Things not supported (yet): let-bindings for functions; meaning, rec flags are not
  