// ISSUE: KT-50386 interface Flow interface MutableSharedFlow : Flow fun test(output: ((ScrapingOffOutput) -> Unit)) { val p = presenter(output) { ScrapingOffPresenter() } } abstract class Presenter(outputExtraBufferCapacity: Int = 16) { val output: MutableSharedFlow = null!! abstract fun Present(events: Events): Model } fun presenter( events: Event, output: ((Output) -> Unit)? = null, presenterProvider: () -> Presenter ): Model = null!! fun presenter( output: ((Output) -> Unit)? = null, extraBufferCapacity: Int = 16, presenterProvider: () -> Presenter, Model, Output> ): PresentedData> = null!! data class PresentedData( val model: M, val events: E, ) private class ScrapingOffPresenter : Presenter, ScrapingOffModel, ScrapingOffOutput>() { override fun Present(events: Flow): ScrapingOffModel { return ScrapingOffModel() } } class ScrapingOffEvent class ScrapingOffOutput class ScrapingOffModel