Cleaning code and adding more properties
Separating the monad definition and the functions
Applying one change in the definition of select