open class L(val ll: LL) class Rec(val rt: T) val Rec.p: L get() { class PLocal(lt: LT, val pt: PT): L(lt) return foo2(rt, rt, ::PLocal) } fun Rec.fn(): L { class FLocal(lt: LT, val pt: FT) : L(lt) return foo2(rt, rt, ::FLocal) } fun foo2(t1: T1, t2: T2, bb: (T1, T2) -> R): R = bb(t1, t2)