// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/*library: nnbd=true*/

import 'dart:async';
import 'dart:_internal';

export 'dart:async' show Future;

/*class: Object:Object*/
class Object {
  const Object();

  bool operator ==(Object other) => true;
}

/*class: Null:Null,Object*/
class Null {
  factory Null._uninstantiable() {
    throw 'class Null cannot be instantiated';
  }
}

/*class: bool:Object,bool*/
class bool {}

/*class: num:Object,num*/
class num {}

/*class: int:Object,int,num*/
class int extends num {}

/*class: double:Object,double,num*/
class double extends num {}

/*class: String:Object,String*/
class String {}

/*class: Iterable:Iterable<E>,Object*/
class Iterable<E> {}

/*class: List:Iterable<E>,List<E>,Object*/
class List<E> implements Iterable<E> {}

/*class: Set:Iterable<E>,Object,Set<E>*/
class Set<E> implements Iterable<E> {}

/*class: Map:Map<K,V>,Object*/
class Map<K, V> {}

/*class: Stream:Object,Stream<E>*/
class Stream<E> {}

/*class: Function:Function,Object*/
class Function {}

/*class: Symbol:Object,Symbol*/
class Symbol {}

/*class: Type:Object,Type*/
class Type {}
