Nondeterminism with Referential Transparency in Functional Programming Languages