add enumerable, retire observable_enum, add compositional fns