typing cases in programming