added case, guards and let