anchor.diff:      true;
   unify1({id, _, Name}, {id, _, Name}, _When) ->
       true;
  +unify1({qid, _, Name}, {qid, _, Name}, _When) ->
  +    true;
   unify1({fun_t, _, Args1, Result1}, {fun_t, _, Args2, Result2}, When) ->
       unify(Args1, Args2, When) andalso unify(Result1, Result2, When);
   unify1({app_t, _, {id, _, F}, Args1}, {app_t, _, {id, _, F}, Args2}, When)
  
positive.code:         {alias_t, _} -> ok
      end.
  
  -spec lookup_type(string()) -> false | {[aeso_syntax:tvar()], aeso_syntax:typedef()}.
  lookup_type(Name) ->
      case ets:lookup(type_defs, Name) of
          []                       -> false;
          [{Name, Params, Typedef}] -> {Params, Typedef}
      end.
  
  -spec insert_record_field(string(), field_info()) -> true.
  
negative.code:     case Solutions of
          [] ->
              {no_records_with_all_fields, Fields};
          [RecId] ->
              {Formals, {record_t, _}} = lookup_type(RecId),
              create_freshen_tvars(),
              FreshRecType = freshen({app_t, Attrs, RecId, Formals}),
              destroy_freshen_tvars(),
              unify(UVar, FreshRecType, {solve_rec_type, UVar, Fields}),
              true;
  