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 "()"; } } }