From 935d0113acdd6712721e949c3663f27e4d1f56a1 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Mena Date: Tue, 15 Oct 2024 11:22:38 +0200 Subject: [PATCH] Make `Schedule` a `fun interface` --- .../arrow-resilience/api/arrow-resilience.api | 130 +++++++------ .../api/arrow-resilience.klib.api | 177 +++++++++--------- .../kotlin/arrow/resilience/Schedule.kt | 47 +++-- .../kotlin/arrow/resilience/flow.kt | 4 +- .../kotlin/arrow/resilience/ScheduleTest.kt | 2 +- gradle/libs.versions.toml | 2 +- 6 files changed, 182 insertions(+), 180 deletions(-) diff --git a/arrow-libs/resilience/arrow-resilience/api/arrow-resilience.api b/arrow-libs/resilience/arrow-resilience/api/arrow-resilience.api index 52e034ccf6a..2d5540a0bca 100644 --- a/arrow-libs/resilience/arrow-resilience/api/arrow-resilience.api +++ b/arrow-libs/resilience/arrow-resilience/api/arrow-resilience.api @@ -96,7 +96,7 @@ public final class arrow/resilience/CircuitBreaker$State$Open : arrow/resilience } public final class arrow/resilience/FlowKt { - public static final fun retry-z663S_Q (Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; + public static final fun retry (Lkotlinx/coroutines/flow/Flow;Larrow/resilience/Schedule;)Lkotlinx/coroutines/flow/Flow; } public final class arrow/resilience/SagaActionStep { @@ -133,56 +133,45 @@ public final class arrow/resilience/SagaScope$DefaultImpls { public static fun invoke (Larrow/resilience/SagaScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } -public final class arrow/resilience/Schedule { +public abstract interface class arrow/resilience/Schedule { public static final field Companion Larrow/resilience/Schedule$Companion; - public static final fun and-6Pcb-r4 (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public static final fun and-GI_V1oY (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; - public static final fun and-JfEqqxs (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public static final fun andThen-GI_V1oY (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; - public static final fun andThen-JfEqqxs (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; - public static final synthetic fun box-impl (Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; - public static final fun collect-k5utPk0 (Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; - public static fun constructor-impl (Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; - public static final fun contramap-ZhmCDx4 (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; - public static final fun delayed-ZhmCDx4 (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public static final fun doUntil-ZhmCDx4 (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public static final fun doWhile-ZhmCDx4 (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public fun equals (Ljava/lang/Object;)Z - public static fun equals-impl (Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)Z - public static final fun equals-impl0 (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Z - public static final fun fold-juJHlvs (Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public final fun getStep ()Lkotlin/jvm/functions/Function2; - public fun hashCode ()I - public static fun hashCode-impl (Lkotlin/jvm/functions/Function2;)I - public static final fun jittered-Q7pyTlY (Lkotlin/jvm/functions/Function2;DDLkotlin/random/Random;)Lkotlin/jvm/functions/Function2; - public static synthetic fun jittered-Q7pyTlY$default (Lkotlin/jvm/functions/Function2;DDLkotlin/random/Random;ILjava/lang/Object;)Lkotlin/jvm/functions/Function2; - public static final fun log-ZhmCDx4 (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public static final fun map-ZhmCDx4 (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; - public static final fun mapDecision-ZhmCDx4 (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; - public static final fun or-JfEqqxs (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public static final fun repeat-impl (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static final fun repeatOrElse-impl (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static final fun repeatOrElseEither-impl (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public fun toString ()Ljava/lang/String; - public static fun toString-impl (Lkotlin/jvm/functions/Function2;)Ljava/lang/String; - public final synthetic fun unbox-impl ()Lkotlin/jvm/functions/Function2; - public static final fun zipLeft-GI_V1oY (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; - public static final fun zipRight-GI_V1oY (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; + public abstract fun and (Larrow/resilience/Schedule;)Larrow/resilience/Schedule; + public abstract fun and (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public abstract fun and (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public abstract fun andThen (Larrow/resilience/Schedule;)Larrow/resilience/Schedule; + public abstract fun andThen (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; + public abstract fun collect ()Larrow/resilience/Schedule; + public abstract fun contramap (Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; + public abstract fun delayed (Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public abstract fun doUntil (Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public abstract fun doWhile (Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public abstract fun fold (Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public abstract fun jittered (DDLkotlin/random/Random;)Larrow/resilience/Schedule; + public abstract fun log (Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public abstract fun map (Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; + public abstract fun mapDecision (Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; + public abstract fun or (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public abstract fun repeat (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun repeatOrElse (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun repeatOrElseEither (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun step (Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public abstract fun zipLeft (Larrow/resilience/Schedule;)Larrow/resilience/Schedule; + public abstract fun zipRight (Larrow/resilience/Schedule;)Larrow/resilience/Schedule; } public final class arrow/resilience/Schedule$Companion { - public final fun collect-k5utPk0 ()Lkotlin/jvm/functions/Function2; - public final fun doUntil-ZhmCDx4 (Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public final fun doWhile-ZhmCDx4 (Lkotlin/jvm/functions/Function3;)Lkotlin/jvm/functions/Function2; - public final fun exponential-la_RjoE (JD)Lkotlin/jvm/functions/Function2; - public static synthetic fun exponential-la_RjoE$default (Larrow/resilience/Schedule$Companion;JDILjava/lang/Object;)Lkotlin/jvm/functions/Function2; - public final fun fibonacci-0qC2UY4 (J)Lkotlin/jvm/functions/Function2; - public final fun forever-k5utPk0 ()Lkotlin/jvm/functions/Function2; - public final fun identity-k5utPk0 ()Lkotlin/jvm/functions/Function2; - public final fun linear-0qC2UY4 (J)Lkotlin/jvm/functions/Function2; - public final fun recurs-ZhmCDx4 (J)Lkotlin/jvm/functions/Function2; - public final fun spaced-0qC2UY4 (J)Lkotlin/jvm/functions/Function2; - public final fun unfold-juJHlvs (Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function2; + public final fun collect ()Larrow/resilience/Schedule; + public final fun doUntil (Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public final fun doWhile (Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public final fun exponential-VtjQ1oo (JD)Larrow/resilience/Schedule; + public static synthetic fun exponential-VtjQ1oo$default (Larrow/resilience/Schedule$Companion;JDILjava/lang/Object;)Larrow/resilience/Schedule; + public final fun fibonacci-LRDsOJo (J)Larrow/resilience/Schedule; + public final fun forever ()Larrow/resilience/Schedule; + public final fun identity ()Larrow/resilience/Schedule; + public final fun linear-LRDsOJo (J)Larrow/resilience/Schedule; + public final fun recurs (J)Larrow/resilience/Schedule; + public final fun spaced-LRDsOJo (J)Larrow/resilience/Schedule; + public final fun unfold (Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; } public abstract interface class arrow/resilience/Schedule$Decision { @@ -198,21 +187,21 @@ public abstract interface class arrow/resilience/Schedule$Decision { } public final class arrow/resilience/Schedule$Decision$Continue : arrow/resilience/Schedule$Decision { - public synthetic fun (Ljava/lang/Object;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/Object;JLarrow/resilience/Schedule;Lkotlin/jvm/internal/DefaultConstructorMarker;)V public fun and (Larrow/resilience/Schedule$Decision;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun andThen (Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun andThen (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun component1 ()Ljava/lang/Object; public final fun component2-UwyO8pc ()J - public final fun component3 ()Lkotlin/jvm/functions/Function2; + public final fun component3 ()Larrow/resilience/Schedule; public fun contramap (Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public final fun copy-8Mi8wO0 (Ljava/lang/Object;JLkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule$Decision$Continue; - public static synthetic fun copy-8Mi8wO0$default (Larrow/resilience/Schedule$Decision$Continue;Ljava/lang/Object;JLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Larrow/resilience/Schedule$Decision$Continue; + public final fun copy-8Mi8wO0 (Ljava/lang/Object;JLarrow/resilience/Schedule;)Larrow/resilience/Schedule$Decision$Continue; + public static synthetic fun copy-8Mi8wO0$default (Larrow/resilience/Schedule$Decision$Continue;Ljava/lang/Object;JLarrow/resilience/Schedule;ILjava/lang/Object;)Larrow/resilience/Schedule$Decision$Continue; public fun delayed (Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun equals (Ljava/lang/Object;)Z public final fun getDelay-UwyO8pc ()J public fun getOutput ()Ljava/lang/Object; - public final fun getStep ()Lkotlin/jvm/functions/Function2; + public final fun getStep ()Larrow/resilience/Schedule; public fun hashCode ()I public fun map (Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public fun or (Larrow/resilience/Schedule$Decision;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; @@ -250,13 +239,38 @@ public final class arrow/resilience/Schedule$Decision$Done : arrow/resilience/Sc public fun toString ()Ljava/lang/String; } +public final class arrow/resilience/Schedule$DefaultImpls { + public static fun and (Larrow/resilience/Schedule;Larrow/resilience/Schedule;)Larrow/resilience/Schedule; + public static fun and (Larrow/resilience/Schedule;Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public static fun and (Larrow/resilience/Schedule;Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public static fun andThen (Larrow/resilience/Schedule;Larrow/resilience/Schedule;)Larrow/resilience/Schedule; + public static fun andThen (Larrow/resilience/Schedule;Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; + public static fun collect (Larrow/resilience/Schedule;)Larrow/resilience/Schedule; + public static fun contramap (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; + public static fun delayed (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public static fun doUntil (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public static fun doWhile (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public static fun fold (Larrow/resilience/Schedule;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public static fun jittered (Larrow/resilience/Schedule;DDLkotlin/random/Random;)Larrow/resilience/Schedule; + public static synthetic fun jittered$default (Larrow/resilience/Schedule;DDLkotlin/random/Random;ILjava/lang/Object;)Larrow/resilience/Schedule; + public static fun log (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public static fun map (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; + public static fun mapDecision (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function2;)Larrow/resilience/Schedule; + public static fun or (Larrow/resilience/Schedule;Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)Larrow/resilience/Schedule; + public static fun repeat (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun repeatOrElse (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun repeatOrElseEither (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static fun zipLeft (Larrow/resilience/Schedule;Larrow/resilience/Schedule;)Larrow/resilience/Schedule; + public static fun zipRight (Larrow/resilience/Schedule;Larrow/resilience/Schedule;)Larrow/resilience/Schedule; +} + public final class arrow/resilience/ScheduleKt { - public static final fun retry-YL6hcnA (Larrow/core/raise/Raise;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static final fun retry-aZo8_V4 (Lkotlin/jvm/functions/Function2;Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static final fun retryEither-4AuOtiA (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static final fun retryOrElse-quv6EbI (Lkotlin/jvm/functions/Function2;Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static final fun retryOrElseEither-quv6EbI (Lkotlin/jvm/functions/Function2;Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; - public static final fun retryRaise-4AuOtiA (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun retry (Larrow/core/raise/Raise;Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun retry (Larrow/resilience/Schedule;Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun retryEither (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun retryOrElse (Larrow/resilience/Schedule;Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun retryOrElseEither (Larrow/resilience/Schedule;Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static final fun retryRaise (Larrow/resilience/Schedule;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } public final class arrow/resilience/common/Platform : java/lang/Enum { diff --git a/arrow-libs/resilience/arrow-resilience/api/arrow-resilience.klib.api b/arrow-libs/resilience/arrow-resilience/api/arrow-resilience.klib.api index 17cf9ae567e..fb2a4ce484d 100644 --- a/arrow-libs/resilience/arrow-resilience/api/arrow-resilience.klib.api +++ b/arrow-libs/resilience/arrow-resilience/api/arrow-resilience.klib.api @@ -23,6 +23,91 @@ final enum class arrow.resilience.common/Platform : kotlin/Enum // arrow.resilience.common/Platform.values|values#static(){}[0] } +abstract fun interface <#A: in kotlin/Any?, #B: out kotlin/Any?> arrow.resilience/Schedule { // arrow.resilience/Schedule|null[0] + abstract suspend fun step(#A): arrow.resilience/Schedule.Decision<#A, #B> // arrow.resilience/Schedule.step|step(1:0){}[0] + open fun <#A1: kotlin/Any?, #B1: kotlin/Any?> and(arrow.resilience/Schedule<#A, #A1>, kotlin.coroutines/SuspendFunction2<#B, #A1, #B1>): arrow.resilience/Schedule<#A, #B1> // arrow.resilience/Schedule.and|and(arrow.resilience.Schedule<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1,0:0,0:1>){0§;1§}[0] + open fun <#A1: kotlin/Any?, #B1: kotlin/Any?> and(arrow.resilience/Schedule<#A, #A1>, kotlin.coroutines/SuspendFunction2<#B, #A1, #B1>, kotlin.coroutines/SuspendFunction2): arrow.resilience/Schedule<#A, #B1> // arrow.resilience/Schedule.and|and(arrow.resilience.Schedule<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1,0:0,0:1>;kotlin.coroutines.SuspendFunction2){0§;1§}[0] + open fun <#A1: kotlin/Any?, #B1: kotlin/Any?> andThen(arrow.resilience/Schedule<#A, #A1>, kotlin.coroutines/SuspendFunction1<#B, #B1>, kotlin.coroutines/SuspendFunction1<#A1, #B1>): arrow.resilience/Schedule<#A, #B1> // arrow.resilience/Schedule.andThen|andThen(arrow.resilience.Schedule<1:0,0:0>;kotlin.coroutines.SuspendFunction1<1:1,0:1>;kotlin.coroutines.SuspendFunction1<0:0,0:1>){0§;1§}[0] + open fun <#A1: kotlin/Any?, #B1: kotlin/Any?> or(arrow.resilience/Schedule<#A, #A1>, kotlin.coroutines/SuspendFunction2<#B?, #A1?, #B1>, kotlin.coroutines/SuspendFunction2): arrow.resilience/Schedule<#A, #B1> // arrow.resilience/Schedule.or|or(arrow.resilience.Schedule<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1?,0:0?,0:1>;kotlin.coroutines.SuspendFunction2){0§;1§}[0] + open fun <#A1: kotlin/Any?> and(arrow.resilience/Schedule<#A, #A1>): arrow.resilience/Schedule<#A, kotlin/Pair<#B, #A1>> // arrow.resilience/Schedule.and|and(arrow.resilience.Schedule<1:0,0:0>){0§}[0] + open fun <#A1: kotlin/Any?> andThen(arrow.resilience/Schedule<#A, #A1>): arrow.resilience/Schedule<#A, arrow.core/Either<#B, #A1>> // arrow.resilience/Schedule.andThen|andThen(arrow.resilience.Schedule<1:0,0:0>){0§}[0] + open fun <#A1: kotlin/Any?> contramap(kotlin.coroutines/SuspendFunction1<#A1, #A>): arrow.resilience/Schedule<#A1, #B> // arrow.resilience/Schedule.contramap|contramap(kotlin.coroutines.SuspendFunction1<0:0,1:0>){0§}[0] + open fun <#A1: kotlin/Any?> fold(#A1, kotlin.coroutines/SuspendFunction2<#A1, #B, #A1>): arrow.resilience/Schedule<#A, #A1> // arrow.resilience/Schedule.fold|fold(0:0;kotlin.coroutines.SuspendFunction2<0:0,1:1,0:0>){0§}[0] + open fun <#A1: kotlin/Any?> map(kotlin.coroutines/SuspendFunction1<#B, #A1>): arrow.resilience/Schedule<#A, #A1> // arrow.resilience/Schedule.map|map(kotlin.coroutines.SuspendFunction1<1:1,0:0>){0§}[0] + open fun <#A1: kotlin/Any?> zipLeft(arrow.resilience/Schedule<#A, #A1>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.zipLeft|zipLeft(arrow.resilience.Schedule<1:0,0:0>){0§}[0] + open fun <#A1: kotlin/Any?> zipRight(arrow.resilience/Schedule<#A, #A1>): arrow.resilience/Schedule<#A, #A1> // arrow.resilience/Schedule.zipRight|zipRight(arrow.resilience.Schedule<1:0,0:0>){0§}[0] + open fun collect(): arrow.resilience/Schedule<#A, kotlin.collections/List<#B>> // arrow.resilience/Schedule.collect|collect(){}[0] + open fun delayed(kotlin.coroutines/SuspendFunction2<#B, kotlin.time/Duration, kotlin.time/Duration>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.delayed|delayed(kotlin.coroutines.SuspendFunction2<1:1,kotlin.time.Duration,kotlin.time.Duration>){}[0] + open fun doUntil(kotlin.coroutines/SuspendFunction2<#A, #B, kotlin/Boolean>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.doUntil|doUntil(kotlin.coroutines.SuspendFunction2<1:0,1:1,kotlin.Boolean>){}[0] + open fun doWhile(kotlin.coroutines/SuspendFunction2<#A, #B, kotlin/Boolean>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.doWhile|doWhile(kotlin.coroutines.SuspendFunction2<1:0,1:1,kotlin.Boolean>){}[0] + open fun jittered(kotlin/Double = ..., kotlin/Double = ..., kotlin.random/Random = ...): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.jittered|jittered(kotlin.Double;kotlin.Double;kotlin.random.Random){}[0] + open fun log(kotlin.coroutines/SuspendFunction2<#A, #B, kotlin/Unit>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.log|log(kotlin.coroutines.SuspendFunction2<1:0,1:1,kotlin.Unit>){}[0] + open fun mapDecision(kotlin.coroutines/SuspendFunction1, arrow.resilience/Schedule.Decision<#A, #B>>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.mapDecision|mapDecision(kotlin.coroutines.SuspendFunction1,arrow.resilience.Schedule.Decision<1:0,1:1>>){}[0] + open suspend fun <#A1: kotlin/Any?> repeatOrElseEither(kotlin.coroutines/SuspendFunction0<#A>, kotlin.coroutines/SuspendFunction2): arrow.core/Either<#A1, #B> // arrow.resilience/Schedule.repeatOrElseEither|repeatOrElseEither(kotlin.coroutines.SuspendFunction0<1:0>;kotlin.coroutines.SuspendFunction2){0§}[0] + open suspend fun repeat(kotlin.coroutines/SuspendFunction0<#A>): #B // arrow.resilience/Schedule.repeat|repeat(kotlin.coroutines.SuspendFunction0<1:0>){}[0] + open suspend fun repeatOrElse(kotlin.coroutines/SuspendFunction0<#A>, kotlin.coroutines/SuspendFunction2): #B // arrow.resilience/Schedule.repeatOrElse|repeatOrElse(kotlin.coroutines.SuspendFunction0<1:0>;kotlin.coroutines.SuspendFunction2){}[0] + + sealed interface <#A1: in kotlin/Any?, #B1: out kotlin/Any?> Decision { // arrow.resilience/Schedule.Decision|null[0] + abstract val output // arrow.resilience/Schedule.Decision.output|{}output[0] + abstract fun (): #B1 // arrow.resilience/Schedule.Decision.output.|(){}[0] + + open suspend fun <#A2: kotlin/Any?, #B2: kotlin/Any?> and(arrow.resilience/Schedule.Decision<#A1, #A2>, kotlin.coroutines/SuspendFunction2<#B1, #A2, #B2>, kotlin.coroutines/SuspendFunction2): arrow.resilience/Schedule.Decision<#A1, #B2> // arrow.resilience/Schedule.Decision.and|and(arrow.resilience.Schedule.Decision<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1,0:0,0:1>;kotlin.coroutines.SuspendFunction2){0§;1§}[0] + open suspend fun <#A2: kotlin/Any?, #B2: kotlin/Any?> andThen(kotlin.coroutines/SuspendFunction1<#A1, arrow.resilience/Schedule.Decision<#A1, #A2>>, kotlin.coroutines/SuspendFunction1<#B1, #B2>, kotlin.coroutines/SuspendFunction1<#A2, #B2>): arrow.resilience/Schedule.Decision<#A1, #B2> // arrow.resilience/Schedule.Decision.andThen|andThen(kotlin.coroutines.SuspendFunction1<1:0,arrow.resilience.Schedule.Decision<1:0,0:0>>;kotlin.coroutines.SuspendFunction1<1:1,0:1>;kotlin.coroutines.SuspendFunction1<0:0,0:1>){0§;1§}[0] + open suspend fun <#A2: kotlin/Any?, #B2: kotlin/Any?> or(arrow.resilience/Schedule.Decision<#A1, #A2>, kotlin.coroutines/SuspendFunction2<#B1?, #A2?, #B2>, kotlin.coroutines/SuspendFunction2): arrow.resilience/Schedule.Decision<#A1, #B2> // arrow.resilience/Schedule.Decision.or|or(arrow.resilience.Schedule.Decision<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1?,0:0?,0:1>;kotlin.coroutines.SuspendFunction2){0§;1§}[0] + open suspend fun <#A2: kotlin/Any?> contramap(kotlin.coroutines/SuspendFunction1<#A2, #A1>): arrow.resilience/Schedule.Decision<#A2, #B1> // arrow.resilience/Schedule.Decision.contramap|contramap(kotlin.coroutines.SuspendFunction1<0:0,1:0>){0§}[0] + open suspend fun <#A2: kotlin/Any?> map(kotlin.coroutines/SuspendFunction1<#B1, #A2>): arrow.resilience/Schedule.Decision<#A1, #A2> // arrow.resilience/Schedule.Decision.map|map(kotlin.coroutines.SuspendFunction1<1:1,0:0>){0§}[0] + open suspend fun andThen(kotlin.coroutines/SuspendFunction1<#A1, arrow.resilience/Schedule.Decision<#A1, #B1>>): arrow.resilience/Schedule.Decision<#A1, #B1> // arrow.resilience/Schedule.Decision.andThen|andThen(kotlin.coroutines.SuspendFunction1<1:0,arrow.resilience.Schedule.Decision<1:0,1:1>>){}[0] + open suspend fun delayed(kotlin.coroutines/SuspendFunction2<#B1, kotlin.time/Duration, kotlin.time/Duration>): arrow.resilience/Schedule.Decision<#A1, #B1> // arrow.resilience/Schedule.Decision.delayed|delayed(kotlin.coroutines.SuspendFunction2<1:1,kotlin.time.Duration,kotlin.time.Duration>){}[0] + open suspend fun recursiveMap(kotlin.coroutines/SuspendFunction1, arrow.resilience/Schedule.Decision<#A1, #B1>>): arrow.resilience/Schedule.Decision<#A1, #B1> // arrow.resilience/Schedule.Decision.recursiveMap|recursiveMap(kotlin.coroutines.SuspendFunction1,arrow.resilience.Schedule.Decision<1:0,1:1>>){}[0] + + final class <#A2: in kotlin/Any?, #B2: out kotlin/Any?> Continue : arrow.resilience/Schedule.Decision<#A2, #B2> { // arrow.resilience/Schedule.Decision.Continue|null[0] + constructor (#B2, kotlin.time/Duration, arrow.resilience/Schedule<#A2, #B2>) // arrow.resilience/Schedule.Decision.Continue.|(1:1;kotlin.time.Duration;arrow.resilience.Schedule<1:0,1:1>){}[0] + + final val delay // arrow.resilience/Schedule.Decision.Continue.delay|{}delay[0] + final fun (): kotlin.time/Duration // arrow.resilience/Schedule.Decision.Continue.delay.|(){}[0] + final val output // arrow.resilience/Schedule.Decision.Continue.output|{}output[0] + final fun (): #B2 // arrow.resilience/Schedule.Decision.Continue.output.|(){}[0] + final val step // arrow.resilience/Schedule.Decision.Continue.step|{}step[0] + final fun (): arrow.resilience/Schedule<#A2, #B2> // arrow.resilience/Schedule.Decision.Continue.step.|(){}[0] + + final fun component1(): #B2 // arrow.resilience/Schedule.Decision.Continue.component1|component1(){}[0] + final fun component2(): kotlin.time/Duration // arrow.resilience/Schedule.Decision.Continue.component2|component2(){}[0] + final fun component3(): arrow.resilience/Schedule<#A2, #B2> // arrow.resilience/Schedule.Decision.Continue.component3|component3(){}[0] + final fun copy(#B2 = ..., kotlin.time/Duration = ..., arrow.resilience/Schedule<#A2, #B2> = ...): arrow.resilience/Schedule.Decision.Continue<#A2, #B2> // arrow.resilience/Schedule.Decision.Continue.copy|copy(1:1;kotlin.time.Duration;arrow.resilience.Schedule<1:0,1:1>){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // arrow.resilience/Schedule.Decision.Continue.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // arrow.resilience/Schedule.Decision.Continue.hashCode|hashCode(){}[0] + final fun toString(): kotlin/String // arrow.resilience/Schedule.Decision.Continue.toString|toString(){}[0] + } + + final class <#A2: out kotlin/Any?> Done : arrow.resilience/Schedule.Decision { // arrow.resilience/Schedule.Decision.Done|null[0] + constructor (#A2) // arrow.resilience/Schedule.Decision.Done.|(1:0){}[0] + + final val output // arrow.resilience/Schedule.Decision.Done.output|{}output[0] + final fun (): #A2 // arrow.resilience/Schedule.Decision.Done.output.|(){}[0] + + final fun component1(): #A2 // arrow.resilience/Schedule.Decision.Done.component1|component1(){}[0] + final fun copy(#A2 = ...): arrow.resilience/Schedule.Decision.Done<#A2> // arrow.resilience/Schedule.Decision.Done.copy|copy(1:0){}[0] + final fun equals(kotlin/Any?): kotlin/Boolean // arrow.resilience/Schedule.Decision.Done.equals|equals(kotlin.Any?){}[0] + final fun hashCode(): kotlin/Int // arrow.resilience/Schedule.Decision.Done.hashCode|hashCode(){}[0] + final fun toString(): kotlin/String // arrow.resilience/Schedule.Decision.Done.toString|toString(){}[0] + } + } + + final object Companion { // arrow.resilience/Schedule.Companion|null[0] + final fun <#A2: kotlin/Any?, #B2: kotlin/Any?> unfold(#B2, kotlin.coroutines/SuspendFunction1<#B2, #B2>): arrow.resilience/Schedule<#A2, #B2> // arrow.resilience/Schedule.Companion.unfold|unfold(0:1;kotlin.coroutines.SuspendFunction1<0:1,0:1>){0§;1§}[0] + final fun <#A2: kotlin/Any?> collect(): arrow.resilience/Schedule<#A2, kotlin.collections/List<#A2>> // arrow.resilience/Schedule.Companion.collect|collect(){0§}[0] + final fun <#A2: kotlin/Any?> doUntil(kotlin.coroutines/SuspendFunction2<#A2, #A2, kotlin/Boolean>): arrow.resilience/Schedule<#A2, #A2> // arrow.resilience/Schedule.Companion.doUntil|doUntil(kotlin.coroutines.SuspendFunction2<0:0,0:0,kotlin.Boolean>){0§}[0] + final fun <#A2: kotlin/Any?> doWhile(kotlin.coroutines/SuspendFunction2<#A2, #A2, kotlin/Boolean>): arrow.resilience/Schedule<#A2, #A2> // arrow.resilience/Schedule.Companion.doWhile|doWhile(kotlin.coroutines.SuspendFunction2<0:0,0:0,kotlin.Boolean>){0§}[0] + final fun <#A2: kotlin/Any?> exponential(kotlin.time/Duration, kotlin/Double = ...): arrow.resilience/Schedule<#A2, kotlin.time/Duration> // arrow.resilience/Schedule.Companion.exponential|exponential(kotlin.time.Duration;kotlin.Double){0§}[0] + final fun <#A2: kotlin/Any?> fibonacci(kotlin.time/Duration): arrow.resilience/Schedule<#A2, kotlin.time/Duration> // arrow.resilience/Schedule.Companion.fibonacci|fibonacci(kotlin.time.Duration){0§}[0] + final fun <#A2: kotlin/Any?> forever(): arrow.resilience/Schedule<#A2, kotlin/Long> // arrow.resilience/Schedule.Companion.forever|forever(){0§}[0] + final fun <#A2: kotlin/Any?> identity(): arrow.resilience/Schedule<#A2, #A2> // arrow.resilience/Schedule.Companion.identity|identity(){0§}[0] + final fun <#A2: kotlin/Any?> linear(kotlin.time/Duration): arrow.resilience/Schedule<#A2, kotlin.time/Duration> // arrow.resilience/Schedule.Companion.linear|linear(kotlin.time.Duration){0§}[0] + final fun <#A2: kotlin/Any?> recurs(kotlin/Long): arrow.resilience/Schedule<#A2, kotlin/Long> // arrow.resilience/Schedule.Companion.recurs|recurs(kotlin.Long){0§}[0] + final fun <#A2: kotlin/Any?> spaced(kotlin.time/Duration): arrow.resilience/Schedule<#A2, kotlin/Long> // arrow.resilience/Schedule.Companion.spaced|spaced(kotlin.time.Duration){0§}[0] + } +} + abstract interface arrow.resilience/SagaScope { // arrow.resilience/SagaScope|null[0] abstract suspend fun <#A1: kotlin/Any?> saga(kotlin.coroutines/SuspendFunction1, kotlin.coroutines/SuspendFunction1<#A1, kotlin/Unit>): #A1 // arrow.resilience/SagaScope.saga|saga(kotlin.coroutines.SuspendFunction1;kotlin.coroutines.SuspendFunction1<0:0,kotlin.Unit>){0§}[0] open suspend fun <#A1: kotlin/Any?> (kotlin.coroutines/SuspendFunction1).bind(): #A1 // arrow.resilience/SagaScope.bind|bind@kotlin.coroutines.SuspendFunction1(){0§}[0] @@ -149,98 +234,6 @@ final class arrow.resilience/SagaBuilder : arrow.resilience/SagaScope { // arrow final suspend fun totalCompensation() // arrow.resilience/SagaBuilder.totalCompensation|totalCompensation(){}[0] } -final value class <#A: in kotlin/Any?, #B: out kotlin/Any?> arrow.resilience/Schedule { // arrow.resilience/Schedule|null[0] - constructor (kotlin.coroutines/SuspendFunction1<#A, arrow.resilience/Schedule.Decision<#A, #B>>) // arrow.resilience/Schedule.|(kotlin.coroutines.SuspendFunction1<1:0,arrow.resilience.Schedule.Decision<1:0,1:1>>){}[0] - - final val step // arrow.resilience/Schedule.step|{}step[0] - final fun (): kotlin.coroutines/SuspendFunction1<#A, arrow.resilience/Schedule.Decision<#A, #B>> // arrow.resilience/Schedule.step.|(){}[0] - - final fun <#A1: kotlin/Any?, #B1: kotlin/Any?> and(arrow.resilience/Schedule<#A, #A1>, kotlin.coroutines/SuspendFunction2<#B, #A1, #B1>): arrow.resilience/Schedule<#A, #B1> // arrow.resilience/Schedule.and|and(arrow.resilience.Schedule<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1,0:0,0:1>){0§;1§}[0] - final fun <#A1: kotlin/Any?, #B1: kotlin/Any?> and(arrow.resilience/Schedule<#A, #A1>, kotlin.coroutines/SuspendFunction2<#B, #A1, #B1>, kotlin.coroutines/SuspendFunction2): arrow.resilience/Schedule<#A, #B1> // arrow.resilience/Schedule.and|and(arrow.resilience.Schedule<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1,0:0,0:1>;kotlin.coroutines.SuspendFunction2){0§;1§}[0] - final fun <#A1: kotlin/Any?, #B1: kotlin/Any?> andThen(arrow.resilience/Schedule<#A, #A1>, kotlin.coroutines/SuspendFunction1<#B, #B1>, kotlin.coroutines/SuspendFunction1<#A1, #B1>): arrow.resilience/Schedule<#A, #B1> // arrow.resilience/Schedule.andThen|andThen(arrow.resilience.Schedule<1:0,0:0>;kotlin.coroutines.SuspendFunction1<1:1,0:1>;kotlin.coroutines.SuspendFunction1<0:0,0:1>){0§;1§}[0] - final fun <#A1: kotlin/Any?, #B1: kotlin/Any?> or(arrow.resilience/Schedule<#A, #A1>, kotlin.coroutines/SuspendFunction2<#B?, #A1?, #B1>, kotlin.coroutines/SuspendFunction2): arrow.resilience/Schedule<#A, #B1> // arrow.resilience/Schedule.or|or(arrow.resilience.Schedule<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1?,0:0?,0:1>;kotlin.coroutines.SuspendFunction2){0§;1§}[0] - final fun <#A1: kotlin/Any?> and(arrow.resilience/Schedule<#A, #A1>): arrow.resilience/Schedule<#A, kotlin/Pair<#B, #A1>> // arrow.resilience/Schedule.and|and(arrow.resilience.Schedule<1:0,0:0>){0§}[0] - final fun <#A1: kotlin/Any?> andThen(arrow.resilience/Schedule<#A, #A1>): arrow.resilience/Schedule<#A, arrow.core/Either<#B, #A1>> // arrow.resilience/Schedule.andThen|andThen(arrow.resilience.Schedule<1:0,0:0>){0§}[0] - final fun <#A1: kotlin/Any?> contramap(kotlin.coroutines/SuspendFunction1<#A1, #A>): arrow.resilience/Schedule<#A1, #B> // arrow.resilience/Schedule.contramap|contramap(kotlin.coroutines.SuspendFunction1<0:0,1:0>){0§}[0] - final fun <#A1: kotlin/Any?> fold(#A1, kotlin.coroutines/SuspendFunction2<#A1, #B, #A1>): arrow.resilience/Schedule<#A, #A1> // arrow.resilience/Schedule.fold|fold(0:0;kotlin.coroutines.SuspendFunction2<0:0,1:1,0:0>){0§}[0] - final fun <#A1: kotlin/Any?> map(kotlin.coroutines/SuspendFunction1<#B, #A1>): arrow.resilience/Schedule<#A, #A1> // arrow.resilience/Schedule.map|map(kotlin.coroutines.SuspendFunction1<1:1,0:0>){0§}[0] - final fun <#A1: kotlin/Any?> zipLeft(arrow.resilience/Schedule<#A, #A1>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.zipLeft|zipLeft(arrow.resilience.Schedule<1:0,0:0>){0§}[0] - final fun <#A1: kotlin/Any?> zipRight(arrow.resilience/Schedule<#A, #A1>): arrow.resilience/Schedule<#A, #A1> // arrow.resilience/Schedule.zipRight|zipRight(arrow.resilience.Schedule<1:0,0:0>){0§}[0] - final fun collect(): arrow.resilience/Schedule<#A, kotlin.collections/List<#B>> // arrow.resilience/Schedule.collect|collect(){}[0] - final fun delayed(kotlin.coroutines/SuspendFunction2<#B, kotlin.time/Duration, kotlin.time/Duration>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.delayed|delayed(kotlin.coroutines.SuspendFunction2<1:1,kotlin.time.Duration,kotlin.time.Duration>){}[0] - final fun doUntil(kotlin.coroutines/SuspendFunction2<#A, #B, kotlin/Boolean>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.doUntil|doUntil(kotlin.coroutines.SuspendFunction2<1:0,1:1,kotlin.Boolean>){}[0] - final fun doWhile(kotlin.coroutines/SuspendFunction2<#A, #B, kotlin/Boolean>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.doWhile|doWhile(kotlin.coroutines.SuspendFunction2<1:0,1:1,kotlin.Boolean>){}[0] - final fun equals(kotlin/Any?): kotlin/Boolean // arrow.resilience/Schedule.equals|equals(kotlin.Any?){}[0] - final fun hashCode(): kotlin/Int // arrow.resilience/Schedule.hashCode|hashCode(){}[0] - final fun jittered(kotlin/Double = ..., kotlin/Double = ..., kotlin.random/Random = ...): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.jittered|jittered(kotlin.Double;kotlin.Double;kotlin.random.Random){}[0] - final fun log(kotlin.coroutines/SuspendFunction2<#A, #B, kotlin/Unit>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.log|log(kotlin.coroutines.SuspendFunction2<1:0,1:1,kotlin.Unit>){}[0] - final fun mapDecision(kotlin.coroutines/SuspendFunction1, arrow.resilience/Schedule.Decision<#A, #B>>): arrow.resilience/Schedule<#A, #B> // arrow.resilience/Schedule.mapDecision|mapDecision(kotlin.coroutines.SuspendFunction1,arrow.resilience.Schedule.Decision<1:0,1:1>>){}[0] - final fun toString(): kotlin/String // arrow.resilience/Schedule.toString|toString(){}[0] - final suspend fun <#A1: kotlin/Any?> repeatOrElseEither(kotlin.coroutines/SuspendFunction0<#A>, kotlin.coroutines/SuspendFunction2): arrow.core/Either<#A1, #B> // arrow.resilience/Schedule.repeatOrElseEither|repeatOrElseEither(kotlin.coroutines.SuspendFunction0<1:0>;kotlin.coroutines.SuspendFunction2){0§}[0] - final suspend fun repeat(kotlin.coroutines/SuspendFunction0<#A>): #B // arrow.resilience/Schedule.repeat|repeat(kotlin.coroutines.SuspendFunction0<1:0>){}[0] - final suspend fun repeatOrElse(kotlin.coroutines/SuspendFunction0<#A>, kotlin.coroutines/SuspendFunction2): #B // arrow.resilience/Schedule.repeatOrElse|repeatOrElse(kotlin.coroutines.SuspendFunction0<1:0>;kotlin.coroutines.SuspendFunction2){}[0] - - sealed interface <#A1: in kotlin/Any?, #B1: out kotlin/Any?> Decision { // arrow.resilience/Schedule.Decision|null[0] - abstract val output // arrow.resilience/Schedule.Decision.output|{}output[0] - abstract fun (): #B1 // arrow.resilience/Schedule.Decision.output.|(){}[0] - - open suspend fun <#A2: kotlin/Any?, #B2: kotlin/Any?> and(arrow.resilience/Schedule.Decision<#A1, #A2>, kotlin.coroutines/SuspendFunction2<#B1, #A2, #B2>, kotlin.coroutines/SuspendFunction2): arrow.resilience/Schedule.Decision<#A1, #B2> // arrow.resilience/Schedule.Decision.and|and(arrow.resilience.Schedule.Decision<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1,0:0,0:1>;kotlin.coroutines.SuspendFunction2){0§;1§}[0] - open suspend fun <#A2: kotlin/Any?, #B2: kotlin/Any?> andThen(kotlin.coroutines/SuspendFunction1<#A1, arrow.resilience/Schedule.Decision<#A1, #A2>>, kotlin.coroutines/SuspendFunction1<#B1, #B2>, kotlin.coroutines/SuspendFunction1<#A2, #B2>): arrow.resilience/Schedule.Decision<#A1, #B2> // arrow.resilience/Schedule.Decision.andThen|andThen(kotlin.coroutines.SuspendFunction1<1:0,arrow.resilience.Schedule.Decision<1:0,0:0>>;kotlin.coroutines.SuspendFunction1<1:1,0:1>;kotlin.coroutines.SuspendFunction1<0:0,0:1>){0§;1§}[0] - open suspend fun <#A2: kotlin/Any?, #B2: kotlin/Any?> or(arrow.resilience/Schedule.Decision<#A1, #A2>, kotlin.coroutines/SuspendFunction2<#B1?, #A2?, #B2>, kotlin.coroutines/SuspendFunction2): arrow.resilience/Schedule.Decision<#A1, #B2> // arrow.resilience/Schedule.Decision.or|or(arrow.resilience.Schedule.Decision<1:0,0:0>;kotlin.coroutines.SuspendFunction2<1:1?,0:0?,0:1>;kotlin.coroutines.SuspendFunction2){0§;1§}[0] - open suspend fun <#A2: kotlin/Any?> contramap(kotlin.coroutines/SuspendFunction1<#A2, #A1>): arrow.resilience/Schedule.Decision<#A2, #B1> // arrow.resilience/Schedule.Decision.contramap|contramap(kotlin.coroutines.SuspendFunction1<0:0,1:0>){0§}[0] - open suspend fun <#A2: kotlin/Any?> map(kotlin.coroutines/SuspendFunction1<#B1, #A2>): arrow.resilience/Schedule.Decision<#A1, #A2> // arrow.resilience/Schedule.Decision.map|map(kotlin.coroutines.SuspendFunction1<1:1,0:0>){0§}[0] - open suspend fun andThen(kotlin.coroutines/SuspendFunction1<#A1, arrow.resilience/Schedule.Decision<#A1, #B1>>): arrow.resilience/Schedule.Decision<#A1, #B1> // arrow.resilience/Schedule.Decision.andThen|andThen(kotlin.coroutines.SuspendFunction1<1:0,arrow.resilience.Schedule.Decision<1:0,1:1>>){}[0] - open suspend fun delayed(kotlin.coroutines/SuspendFunction2<#B1, kotlin.time/Duration, kotlin.time/Duration>): arrow.resilience/Schedule.Decision<#A1, #B1> // arrow.resilience/Schedule.Decision.delayed|delayed(kotlin.coroutines.SuspendFunction2<1:1,kotlin.time.Duration,kotlin.time.Duration>){}[0] - open suspend fun recursiveMap(kotlin.coroutines/SuspendFunction1, arrow.resilience/Schedule.Decision<#A1, #B1>>): arrow.resilience/Schedule.Decision<#A1, #B1> // arrow.resilience/Schedule.Decision.recursiveMap|recursiveMap(kotlin.coroutines.SuspendFunction1,arrow.resilience.Schedule.Decision<1:0,1:1>>){}[0] - - final class <#A2: in kotlin/Any?, #B2: out kotlin/Any?> Continue : arrow.resilience/Schedule.Decision<#A2, #B2> { // arrow.resilience/Schedule.Decision.Continue|null[0] - constructor (#B2, kotlin.time/Duration, kotlin.coroutines/SuspendFunction1<#A2, arrow.resilience/Schedule.Decision<#A2, #B2>>) // arrow.resilience/Schedule.Decision.Continue.|(1:1;kotlin.time.Duration;kotlin.coroutines.SuspendFunction1<1:0,arrow.resilience.Schedule.Decision<1:0,1:1>>){}[0] - - final val delay // arrow.resilience/Schedule.Decision.Continue.delay|{}delay[0] - final fun (): kotlin.time/Duration // arrow.resilience/Schedule.Decision.Continue.delay.|(){}[0] - final val output // arrow.resilience/Schedule.Decision.Continue.output|{}output[0] - final fun (): #B2 // arrow.resilience/Schedule.Decision.Continue.output.|(){}[0] - final val step // arrow.resilience/Schedule.Decision.Continue.step|{}step[0] - final fun (): kotlin.coroutines/SuspendFunction1<#A2, arrow.resilience/Schedule.Decision<#A2, #B2>> // arrow.resilience/Schedule.Decision.Continue.step.|(){}[0] - - final fun component1(): #B2 // arrow.resilience/Schedule.Decision.Continue.component1|component1(){}[0] - final fun component2(): kotlin.time/Duration // arrow.resilience/Schedule.Decision.Continue.component2|component2(){}[0] - final fun component3(): kotlin.coroutines/SuspendFunction1<#A2, arrow.resilience/Schedule.Decision<#A2, #B2>> // arrow.resilience/Schedule.Decision.Continue.component3|component3(){}[0] - final fun copy(#B2 = ..., kotlin.time/Duration = ..., kotlin.coroutines/SuspendFunction1<#A2, arrow.resilience/Schedule.Decision<#A2, #B2>> = ...): arrow.resilience/Schedule.Decision.Continue<#A2, #B2> // arrow.resilience/Schedule.Decision.Continue.copy|copy(1:1;kotlin.time.Duration;kotlin.coroutines.SuspendFunction1<1:0,arrow.resilience.Schedule.Decision<1:0,1:1>>){}[0] - final fun equals(kotlin/Any?): kotlin/Boolean // arrow.resilience/Schedule.Decision.Continue.equals|equals(kotlin.Any?){}[0] - final fun hashCode(): kotlin/Int // arrow.resilience/Schedule.Decision.Continue.hashCode|hashCode(){}[0] - final fun toString(): kotlin/String // arrow.resilience/Schedule.Decision.Continue.toString|toString(){}[0] - } - - final class <#A2: out kotlin/Any?> Done : arrow.resilience/Schedule.Decision { // arrow.resilience/Schedule.Decision.Done|null[0] - constructor (#A2) // arrow.resilience/Schedule.Decision.Done.|(1:0){}[0] - - final val output // arrow.resilience/Schedule.Decision.Done.output|{}output[0] - final fun (): #A2 // arrow.resilience/Schedule.Decision.Done.output.|(){}[0] - - final fun component1(): #A2 // arrow.resilience/Schedule.Decision.Done.component1|component1(){}[0] - final fun copy(#A2 = ...): arrow.resilience/Schedule.Decision.Done<#A2> // arrow.resilience/Schedule.Decision.Done.copy|copy(1:0){}[0] - final fun equals(kotlin/Any?): kotlin/Boolean // arrow.resilience/Schedule.Decision.Done.equals|equals(kotlin.Any?){}[0] - final fun hashCode(): kotlin/Int // arrow.resilience/Schedule.Decision.Done.hashCode|hashCode(){}[0] - final fun toString(): kotlin/String // arrow.resilience/Schedule.Decision.Done.toString|toString(){}[0] - } - } - - final object Companion { // arrow.resilience/Schedule.Companion|null[0] - final fun <#A2: kotlin/Any?, #B2: kotlin/Any?> unfold(#B2, kotlin.coroutines/SuspendFunction1<#B2, #B2>): arrow.resilience/Schedule<#A2, #B2> // arrow.resilience/Schedule.Companion.unfold|unfold(0:1;kotlin.coroutines.SuspendFunction1<0:1,0:1>){0§;1§}[0] - final fun <#A2: kotlin/Any?> collect(): arrow.resilience/Schedule<#A2, kotlin.collections/List<#A2>> // arrow.resilience/Schedule.Companion.collect|collect(){0§}[0] - final fun <#A2: kotlin/Any?> doUntil(kotlin.coroutines/SuspendFunction2<#A2, #A2, kotlin/Boolean>): arrow.resilience/Schedule<#A2, #A2> // arrow.resilience/Schedule.Companion.doUntil|doUntil(kotlin.coroutines.SuspendFunction2<0:0,0:0,kotlin.Boolean>){0§}[0] - final fun <#A2: kotlin/Any?> doWhile(kotlin.coroutines/SuspendFunction2<#A2, #A2, kotlin/Boolean>): arrow.resilience/Schedule<#A2, #A2> // arrow.resilience/Schedule.Companion.doWhile|doWhile(kotlin.coroutines.SuspendFunction2<0:0,0:0,kotlin.Boolean>){0§}[0] - final fun <#A2: kotlin/Any?> exponential(kotlin.time/Duration, kotlin/Double = ...): arrow.resilience/Schedule<#A2, kotlin.time/Duration> // arrow.resilience/Schedule.Companion.exponential|exponential(kotlin.time.Duration;kotlin.Double){0§}[0] - final fun <#A2: kotlin/Any?> fibonacci(kotlin.time/Duration): arrow.resilience/Schedule<#A2, kotlin.time/Duration> // arrow.resilience/Schedule.Companion.fibonacci|fibonacci(kotlin.time.Duration){0§}[0] - final fun <#A2: kotlin/Any?> forever(): arrow.resilience/Schedule<#A2, kotlin/Long> // arrow.resilience/Schedule.Companion.forever|forever(){0§}[0] - final fun <#A2: kotlin/Any?> identity(): arrow.resilience/Schedule<#A2, #A2> // arrow.resilience/Schedule.Companion.identity|identity(){0§}[0] - final fun <#A2: kotlin/Any?> linear(kotlin.time/Duration): arrow.resilience/Schedule<#A2, kotlin.time/Duration> // arrow.resilience/Schedule.Companion.linear|linear(kotlin.time.Duration){0§}[0] - final fun <#A2: kotlin/Any?> recurs(kotlin/Long): arrow.resilience/Schedule<#A2, kotlin/Long> // arrow.resilience/Schedule.Companion.recurs|recurs(kotlin.Long){0§}[0] - final fun <#A2: kotlin/Any?> spaced(kotlin.time/Duration): arrow.resilience/Schedule<#A2, kotlin/Long> // arrow.resilience/Schedule.Companion.spaced|spaced(kotlin.time.Duration){0§}[0] - } -} - final object arrow.resilience/SagaActionStep // arrow.resilience/SagaActionStep|null[0] final val arrow.resilience.common/platform // arrow.resilience.common/platform|{}platform[0] diff --git a/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/Schedule.kt b/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/Schedule.kt index 5217ff4702d..6441e0cae5c 100644 --- a/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/Schedule.kt +++ b/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/Schedule.kt @@ -6,7 +6,6 @@ import arrow.core.Either import arrow.core.NonFatal import arrow.core.None import arrow.core.Option -import arrow.core.identity import arrow.core.left import arrow.core.merge import arrow.core.nonFatalOrThrow @@ -16,7 +15,6 @@ import arrow.core.raise.fold import arrow.core.right import arrow.core.some import arrow.resilience.Schedule.Companion.identity -import arrow.resilience.Schedule.Decision import arrow.resilience.Schedule.Decision.Continue import arrow.resilience.Schedule.Decision.Done import kotlinx.coroutines.currentCoroutineContext @@ -24,7 +22,6 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.ensureActive import kotlinx.coroutines.flow.retry import kotlin.experimental.ExperimentalTypeInference -import kotlin.jvm.JvmInline import kotlin.math.pow import kotlin.random.Random import kotlin.reflect.KClass @@ -33,9 +30,6 @@ import kotlin.time.Duration import kotlin.time.Duration.Companion.ZERO import kotlin.time.Duration.Companion.nanoseconds -public typealias ScheduleStep = - suspend (Input) -> Decision - /** * A [Schedule] describes how a `suspend fun` should [retry] or [repeat]. * @@ -44,8 +38,9 @@ public typealias ScheduleStep = * (and if so, the `delay` until the next attempt), * or if the [Schedule] is [Done] retrying or repeating. */ -@JvmInline -public value class Schedule(public val step: ScheduleStep) { +public fun interface Schedule { + + public suspend fun step(input: Input): Decision /** Repeat the schedule, and uses [block] as [Input] for the [step] function. */ public suspend fun repeat(block: suspend () -> Input): Output = @@ -69,7 +64,7 @@ public value class Schedule(public val step: ScheduleStep< block: suspend () -> Input, orElse: suspend (error: Throwable, output: Output?) -> A ): Either { - var step: ScheduleStep = step + var step: Schedule = this var state: Option = None while (true) { @@ -126,12 +121,12 @@ public value class Schedule(public val step: ScheduleStep< ifLeft: suspend (Output) -> B, ifRight: suspend (A) -> B ): Schedule = - Schedule { step(it).andThen(other.step, ifLeft, ifRight) } + Schedule { step(it).andThen(other::step, ifLeft, ifRight) } /** Runs `this` [Schedule] _while_ the [predicate] of [Input] and [Output] returns `false`. */ public fun doWhile(predicate: suspend (@UnsafeVariance Input, Output) -> Boolean): Schedule { - suspend fun loop(input: Input, self: ScheduleStep): Decision = - when (val decision = self(input)) { + suspend fun loop(input: Input, self: Schedule): Decision = + when (val decision = self.step(input)) { is Continue -> if (predicate(input, decision.output)) Continue(decision.output, decision.delay) { loop(it, decision.step) } else Done(decision.output) @@ -139,7 +134,7 @@ public value class Schedule(public val step: ScheduleStep< is Done -> decision } - return Schedule { input -> loop(input, step) } + return Schedule { input -> loop(input, this) } } /** @@ -179,8 +174,8 @@ public value class Schedule(public val step: ScheduleStep< * If one of the [Schedule]s is done, the other [Schedule] is not executed anymore. */ public fun fold(b: B, f: suspend (B, Output) -> B): Schedule { - suspend fun loop(input: Input, b: B, self: ScheduleStep): Decision = - when (val decision = self(input)) { + suspend fun loop(input: Input, b: B, self: Schedule): Decision = + when (val decision = self.step(input)) { is Continue -> f(b, decision.output).let { b2 -> Continue(b2, decision.delay) { loop(it, b2, decision.step) } } @@ -188,7 +183,7 @@ public value class Schedule(public val step: ScheduleStep< is Done -> Done(b) } - return Schedule { loop(it, b, step) } + return Schedule { loop(it, b, this) } } /** @@ -338,14 +333,14 @@ public value class Schedule(public val step: ScheduleStep< public data class Continue( override val output: Output, val delay: Duration, - val step: ScheduleStep + val step: Schedule ) : Decision public suspend fun recursiveMap( transform: suspend (Decision) -> Decision<@UnsafeVariance Input, @UnsafeVariance Output> ): Decision = when (val next = transform(this)) { is Done -> next - is Continue -> Continue(next.output, next.delay) { next.step(it).recursiveMap(transform) } + is Continue -> Continue(next.output, next.delay) { next.step.step(it).recursiveMap(transform) } } public suspend fun delayed(transform: suspend (Output, Duration) -> Duration): Decision = when (this) { @@ -355,19 +350,19 @@ public value class Schedule(public val step: ScheduleStep< public suspend fun contramap(f: suspend (A) -> Input): Decision = when (this) { is Done -> Done(output) - is Continue -> Continue(output, delay) { step(f(it)).contramap(f) } + is Continue -> Continue(output, delay) { step.step(f(it)).contramap(f) } } public suspend fun map(f: suspend (output: Output) -> A): Decision = when (this) { is Done -> Done(f(output)) - is Continue -> Continue(f(output), delay) { step(it).map(f) } + is Continue -> Continue(f(output), delay) { step.step(it).map(f) } } public suspend fun andThen( other: suspend (@UnsafeVariance Input) -> Decision<@UnsafeVariance Input, @UnsafeVariance Output> ): Decision = when (this) { is Done -> Continue(output, ZERO, other) - is Continue -> Continue(output, delay) { step(it).andThen(other) } + is Continue -> Continue(output, delay) { step.step(it).andThen(other) } } public suspend fun andThen( @@ -386,7 +381,7 @@ public value class Schedule(public val step: ScheduleStep< Continue( transform(this.output, other.output), combineDuration(this.delay, other.delay) - ) { this.step(it).and(other.step(it), transform, combineDuration) } + ) { this.step.step(it).and(other.step.step(it), transform, combineDuration) } else -> Done(transform(this.output, other.output)) } @@ -402,7 +397,7 @@ public value class Schedule(public val step: ScheduleStep< Continue( transform(this.output, other.output), combineDuration(this.delay, other.delay) - ) { this.step(it).or(other.step(it), transform, combineDuration) } + ) { this.step.step(it).or(other.step.step(it), transform, combineDuration) } else -> throw IllegalStateException() } } @@ -468,7 +463,7 @@ public suspend fun Schedule.retryOrE action: suspend () -> Input, orElse: suspend (E, Output) -> A ): Either { - var step: ScheduleStep = step + var step: Schedule = this while (true) { currentCoroutineContext().ensureActive() @@ -522,14 +517,14 @@ public suspend inline fun Raise.retry( schedule: Schedule, @BuilderInference action: Raise.() -> Result, ): Result { - var step: ScheduleStep = schedule.step + var step: Schedule = schedule while (true) { currentCoroutineContext().ensureActive() fold( action, recover = { error -> - when (val decision = step(error)) { + when (val decision = step.step(error)) { is Continue -> { if (decision.delay != ZERO) delay(decision.delay) step = decision.step diff --git a/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/flow.kt b/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/flow.kt index b9357b26318..da4f107e5ee 100644 --- a/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/flow.kt +++ b/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/flow.kt @@ -34,9 +34,9 @@ import kotlin.time.Duration.Companion.ZERO * @param schedule - the [Schedule] used for retrying the collection of the flow */ public fun Flow.retry(schedule: Schedule): Flow { - var step = schedule.step + var step: Schedule = schedule return retryWhen { cause, _ -> - when (val dec = step(cause)) { + when (val dec = step.step(cause)) { is Schedule.Decision.Continue -> { if (dec.delay != ZERO) delay(dec.delay) step = dec.step diff --git a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/ScheduleTest.kt b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/ScheduleTest.kt index 3330d0ab1e0..c70ea578a9e 100644 --- a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/ScheduleTest.kt +++ b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/ScheduleTest.kt @@ -438,7 +438,7 @@ private fun linear(base: Duration): Sequence = */ private suspend fun Schedule.calculateSchedule(input: I, n: Long): List> = buildList { - var step = this@calculateSchedule.step + var step = this@calculateSchedule for (i in 0 until n) { when (val decision = step(input)) { is Continue -> { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 64ba91f7bcf..7ca711c0709 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ classgraph = "4.8.177" dokka = "1.9.20" kotest = "5.9.1" kover = "0.8.3" -kotlin = "2.0.21" +kotlin = "2.1.0-Beta2" kotlinBinaryCompatibilityValidator = "0.16.3" kotlinCompileTesting = "0.5.1" knit = "0.5.0"