`fun getUserProfile(): Either<OldUser, NewUser&...
# arrow
p
fun getUserProfile(): Either<OldUser, NewUser> // a migration
fun getAddresses(): Either<Ipv4, Ipv6> // ad-hoc unions without wrapping
fun <A, B> tailRecM(a: A, f: (A) -> Kind<F, Either<A, B>>): Kind<F, B> // branch in code, reified