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

import "dart:async";

extension Extension<T extends core::Object? = dynamic> on asy::Stream<T%> {
  method call = self::Extension|call;
  method tearoff call = self::Extension|get#call;
}
static method main() → void {
  asy::StreamController<core::String> controller = asy::StreamController::•<core::String>();
  let final asy::StreamController<core::String> #t1 = controller in self::Extension|call<core::String>(#t1.{asy::StreamController::stream}{asy::Stream<core::String>}, (dynamic s) → Null {
    core::print(s);
  });
}
static extension-member method Extension|call<T extends core::Object? = dynamic>(lowered final asy::Stream<self::Extension|call::T%> #this, core::Function onData) → asy::StreamSubscription<self::Extension|call::T%> {
  return #this.{asy::Stream::listen}((self::Extension|call::T% d) → void {
    onData(d);
  }){((self::Extension|call::T%) →? void, {cancelOnError: core::bool?, onDone: () →? void, onError: core::Function?}) → asy::StreamSubscription<self::Extension|call::T%>};
}
static extension-member method Extension|get#call<T extends core::Object? = dynamic>(lowered final asy::Stream<self::Extension|get#call::T%> #this) → (core::Function) → asy::StreamSubscription<self::Extension|get#call::T%>
  return (core::Function onData) → asy::StreamSubscription<self::Extension|get#call::T%> => self::Extension|call<self::Extension|get#call::T%>(#this, onData);
