How types make hard problems easy