Effect

typealias Effect<C, R, P> = C.(P, R.() -> Unit?) -> Unit

This alias should express the main concept of a Hook: The encapsulated effect; that is applying some function with a payload P onto a receiver C (often some Tag). Optionally you can pass in an also-expression that is called on the Result R.