package moe.kageru.kagebot.extensions import arrow.core.Either import arrow.core.Option import arrow.core.Tuple3 import arrow.core.getOrElse import arrow.optics.pFirst import arrow.optics.pSecond fun Either.on(op: (R) -> Unit): Either { this.map { op(it) } return this } fun Either<*, T>.unwrap(): T = getOrElse { error("Attempted to unwrap Either.left") } fun Tuple3.mapSecond(op: (B) -> Option): Option> { return op(this.b).map { Tuple3.pSecond().set(this, it) } } fun Tuple3.mapFirst(op: (A) -> Option): Option> { return op(this.a).map { Tuple3.pFirst().set(this, it) } }