Be a bit more functional
Remove yield
Refine the `Selector` design