Skip to content

Instantly share code, notes, and snippets.

@lucaswerkmeister
Created November 3, 2016 11:18
Show Gist options
  • Save lucaswerkmeister/effe0e1665891d37b1c087ab9162ee8f to your computer and use it in GitHub Desktop.
Save lucaswerkmeister/effe0e1665891d37b1c087ab9162ee8f to your computer and use it in GitHub Desktop.
import ceylon.language.meta.model {
ClassOrInterface
}
shared interface Enumeration<Element> of Element
given Element satisfies Enumeration<Element> {
shared static Element? byName(String name) {
assert (is ClassOrInterface<Element> coi = `Element`);
return coi.caseValues.find((element) => name == element.name);
}
shared formal String name;
}
shared abstract class Season(shared actual String name)
of spring | summer | fall | winter
satisfies Enumeration<Season> {}
shared object spring extends Season("spring") {}
shared object summer extends Season("summer") {}
shared object fall extends Season("fall") {}
shared object winter extends Season("winter") {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment