Type narrowing is the central innovation that makes gradual typing work for languages such as JavaScript and Python. To quote John Reynolds (1968), narrowing uses the “premises in conditional expressions” to refine the types of variables and data structures. But exactly how to use the premises is up for debate. Nearly every gradual typechecker supports basic type narrowing, but after analyzing eight typecheckers in depth we have yet to find two that fully agree on the details! This talk will present the dimensions of type narrowing, the pitfalls of simple implementation strategies, and the mechanics of the effective but “hard” strategy of occurrence typing as found in Typed Racket and Typed Clojure.