foldl/foldr based enumerations
attempt to placate versioneye.com