package com.googlecode.totallylazy.functions;
import com.googlecode.totallylazy.*;
import java.util.concurrent.Callable;
public interface Function0<A> extends Callable<A>, Runnable, Functor<A>, Value<A> {
default A apply() {
return Functions.call(this);
}
@Override
default void run() {
apply();
}
@Override
default A value() {
return apply();
}
default Function0<A> lazy() {
return Lazy.lazy(this);
}
default Function0<A> sleep(int millis) {
return Sleepy0.sleepy(this, millis);
}
default Sequence<A> repeat() {
return Sequences.repeat(this);
}
default Function0<A> time(Function1<? super Number, ?> report) {
return Time0.time(this, report);
}
default Function0<A> time() {
return Time0.time(this);
}
default TimeReport time(int numberOfCalls) {
return TimeReport.time(numberOfCalls, this);
}
@Override
default <B> Function0<B> map(final Function1<? super A, ? extends B> callable) {
return Callables.compose(this, callable);
}
default <B> Function0<B> then(final Function1<? super A, ? extends B> callable) {
return map(callable);
}
default Function0<A> interruptable() {
return Functions.interruptable(this);
}
}