@ -1,11 +1,10 @@
package moe.kageru.kagebot.extensions
import arrow.Kind
import arrow.core.Either
import arrow.core.Option
import arrow.core.Tuple3
import arrow.core.getOrElse
import arrow.optics.pFirst
import arrow.optics.pSecond
import arrow.typeclasses.Functor
fun < L , R > Either < L , R > . on ( op : ( R ) -> Unit ) : Either < L , R > {
this . map { op ( it ) }
@ -14,10 +13,10 @@ fun <L, R> Either<L, R>.on(op: (R) -> Unit): Either<L, R> {
fun < T > Either < * , T > . unwrap ( ) : T = getOrElse { error ( " Attempted to unwrap Either.left " ) }
fun < A , B , C , R > Tuple3 < A , B , C > . map Second( op : ( B ) -> Option < R > ) : Option < Tuple3 < A , R , C > > {
return op ( this . b ) . map { Tuple3 . pSecond < A , B , C , R > ( ) . set ( this , it ) }
fun < A , B , C , A2, F > Tuple3 < A , B , C > . map First( AP : Functor < F > , op : ( A ) -> Kind < F , A2 > ) = let { ( a , b , c ) ->
AP . run { op ( a ) . map { Tuple3 ( it , b , c ) } }
}
fun < A , B , C , R > Tuple3 < A , B , C > . map First( op : ( A ) -> Option < R > ) : Option < Tuple3 < R , B , C > > {
return op ( this . a ) . map { Tuple3 . pFirst < A , B , C , R > ( ) . set ( this , it ) }
fun < A , B , C , B2, F > Tuple3 < A , B , C > . map Second( AP : Functor < F > , op : ( B ) -> Kind < F , B2 > ) = let { ( a , b , c ) ->
AP . run { op ( b ) . map { Tuple3 ( a , it , c ) } }
}