Case, caseLazy and caseCollect are functional. Needs to fix the when/then dsl