Sacar factor común (V)
sealed interface Program<S, T> {
record Done<S, T>(T value) implements Program<S, T> {}
record AndThen<S, X, T>(
Program<S, X> current,
Function<S, X, Program<S, T>> next)
implements Program<S, T> {}
non-sealed interface Dsl<S, T> extends Program<S, T> {
T handle(S state); }
}