make 'where' perform better. start including algebraic types