use

inline fun <C, R> C.use(block: (C) -> R): R
inline fun <I : Input, R> I.use(block: (I) -> R): R
inline fun <O : Output, R> O.use(block: (O) -> R): R