package scotch.data.unit;
import static java.util.Collections.emptyList;
import static scotch.runtime.RuntimeSupport.callable;
import static scotch.symbol.type.TypeDescriptors.sum;
import java.util.List;
import lombok.EqualsAndHashCode;
import scotch.runtime.Callable;
import scotch.symbol.DataConstructor;
import scotch.symbol.DataType;
import scotch.symbol.TypeParameters;
import scotch.symbol.Value;
import scotch.symbol.ValueType;
import scotch.symbol.type.TypeDescriptor;
@DataType(memberName = "()")
public abstract class Unit {
public static final TypeDescriptor TYPE = sum("scotch.data.unit.()");
private static final Callable<Unit> UNIT = callable(UnitData::new);
@TypeParameters
public static List<TypeDescriptor> parameters() {
return emptyList();
}
@ValueType(forMember = "()")
public static TypeDescriptor type() {
return TYPE;
}
@Value(memberName = "()")
public static Callable<Unit> unit() {
return UNIT;
}
private Unit() {
// intentionally empty
}
@Override
public abstract boolean equals(Object o);
@Override
public abstract int hashCode();
@Override
public abstract String toString();
@DataConstructor(memberName = "()", dataType = "()", ordinal = 0)
@EqualsAndHashCode(callSuper = false)
public static class UnitData extends Unit {
private UnitData() {
// intentionally empty
}
@Override
public String toString() {
return "()";
}
}
}