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

abstract class Base extends core::Object {
  synthetic constructor •() → self::Base*
    ;
}
abstract class MixinA<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::MixinA<self::MixinA::T*>*
    ;
  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*
    ;
  method method(core::Object* t) → dynamic
    ;
}
abstract class YamlNode extends core::Object {
  synthetic constructor •() → self::YamlNode*
    ;
}
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*>*
    ;
  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*>*
    ;
  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*>*
    ;
}
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*
    ;
  operator [](core::Object* key) → dynamic
    ;
}
static method main() → dynamic
  ;
