library;
import self as self;
import "dart:core" as core;

abstract class Base extends core::Object {
  synthetic constructor •() → self::Base*
    : super core::Object::•()
    ;
}
abstract class MixinA<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::MixinA<self::MixinA::T*>*
    : super core::Object::•()
    ;
  abstract method method(core::Object* t) → self::MixinA::T*;
}
abstract class _Class&Base&MixinA = self::Base with self::MixinA<dynamic> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Class&Base&MixinA*
    : super self::Base::•()
    ;
}
abstract class Class extends self::_Class&Base&MixinA {
  synthetic constructor •() → self::Class*
    : super self::_Class&Base&MixinA::•()
    ;
  method method(core::Object* t) → dynamic {}
}
abstract class YamlNode extends core::Object {
  synthetic constructor •() → self::YamlNode*
    : super core::Object::•()
    ;
}
abstract class Map<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Map<self::Map::K*, self::Map::V*>*
    : super core::Object::•()
    ;
  abstract operator [](core::Object* key) → self::Map::V*;
}
abstract class MapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::MapMixin::K*, self::MapMixin::V*> {
  synthetic constructor •() → self::MapMixin<self::MapMixin::K*, self::MapMixin::V*>*
    : super core::Object::•()
    ;
  abstract operator [](core::Object* key) → self::MapMixin::V*;
}
abstract class UnmodifiableMapMixin<K extends core::Object* = dynamic, V extends core::Object* = dynamic> extends core::Object implements self::Map<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*> {
  synthetic constructor •() → self::UnmodifiableMapMixin<self::UnmodifiableMapMixin::K*, self::UnmodifiableMapMixin::V*>*
    : super core::Object::•()
    ;
}
abstract class _YamlMap&YamlNode&MapMixin = self::YamlNode with self::MapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin*
    : super self::YamlNode::•()
    ;
}
abstract class _YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin = self::_YamlMap&YamlNode&MapMixin with self::UnmodifiableMapMixin<dynamic, dynamic> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin*
    : super self::_YamlMap&YamlNode&MapMixin::•()
    ;
}
class YamlMap extends self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin {
  synthetic constructor •() → self::YamlMap*
    : super self::_YamlMap&YamlNode&MapMixin&UnmodifiableMapMixin::•()
    ;
  operator [](core::Object* key) → dynamic {}
}
static method main() → dynamic {}
