package haskell.prelude;

import haskell.lang.Exp;

public abstract class AbstractEnum<A extends AbstractEnum<A>>
        extends AbstractOrd<A>
        implements Enum<A> {

    protected AbstractEnum(final java.lang.String name) {
        super(name);
    }

    protected AbstractEnum(
            final java.lang.String name,
            final Internal internal) {
        super(name, internal);
    }

    protected AbstractEnum(final Exp<A> expression) {
        super(expression);
    }

    // ---- java.lang.Object

    @Override
    protected java.lang.String $description() {
        return $name();
    }

    // ---- class Enum

    protected abstract Enum.Support<A> _Enum_();

}
