debounce

fun debounce(waitInterval: Long = 2000, coroutineScope: CoroutineScope, callback: () -> Unit): () -> Unit
fun <T> debounce(waitInterval: Long = 2000, coroutineScope: CoroutineScope, callback: (T) -> Unit): (T) -> Unit
fun <T, G> debounce(waitInterval: Long = 2000, coroutineScope: CoroutineScope, callback: (T, G) -> Unit): (T, G) -> Unit