User-defined datatypes, pattern-matching and recursion are all well known features of Haskell problems, And are also among the most used features. Sometimes however a function is called with an argument that we statically know at compile that it is in a constructor form. So the work of pattern matching is wasted. Even worse the argument is freshly allocated only to be deallocated in the next step. Spec-Constr is a core-to-core optimization implemented inside the Glassgow Haskell Compiler. It's a simple optimization with suprisingly effective results. In this talk I will explain what the algorithm does and some of its pitfalls.