package no.java.incogito;
import fj.F;
import fj.F2;
import static fj.Function.curry;
import fj.data.Option;
import static fj.data.Option.none;
import static fj.data.Option.some;
import fj.pre.Ord;
import fj.pre.Ordering;
import fj.pre.Equal;
import static fj.pre.Equal.anyEqual;
/**
* @author <a href="mailto:trygvis@java.no">Trygve Laugstøl</a>
* @version $Id$
*/
public class Enums {
public static <T extends Enum<T>> F<T, String> toString_() {
return new F<T, String>() {
public String f(T anEnum) {
return anEnum.toString();
}
};
}
public static <T extends Enum<T>> F<T, String> name_() {
return new F<T, String>() {
public String f(T anEnum) {
return anEnum.name();
}
};
}
public static <T extends Enum<T>> F<Class<T>, F<String, Option<T>>> valueOf() {
return curry(new F2<Class<T>, String, Option<T>>() {
public Option<T> f(Class<T> klass, String string) {
try {
return some(Enum.valueOf(klass, string));
} catch (Exception e) {
return none();
}
}
});
}
public static <A extends Enum> Ord<A> ord() {
return Ord.ord(curry(new F2<A, A, Ordering>() {
public Ordering f(A a, A b) {
return Ord.stringOrd.compare(a.name(), b.name());
}
}));
}
public static <E extends Enum> Equal<E> equal() {
return anyEqual();
}
}