library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

typedef hest_t = ({named: dynamic}) → dynamic;
class Bar extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::Bar
    : super core::Object::•()
    ;
  const constructor named(dynamic x) → self::Bar
    : super core::Object::•()
    ;
}
class Baz extends core::Object {
  constructor •(dynamic constructorFormal) → self::Baz
    ;
  static factory bazFactory(dynamic factoryFormal) → self::Baz
    ;
  method fisk(dynamic formal1, dynamic formal2, dynamic formal3, dynamic formal4, [dynamic optional = null]) → dynamic
    ;
  method hest({dynamic named = null}) → dynamic
    ;
}
static const field core::int foo = 42;
static method main() → dynamic
  ;
