Haskell is complex, No one has ever given a precise semantics for all the little corners such as, nested patterns, lazy pattern matching, guards etc. Why in Haskell? common vocabulary easier for Haskell programmers to understand executable Part of the programatica project (worlds slowest haskell implementation) unlike the haskell report gives a finer grain definition Standard against which to compare other implementations Introduce examples which illustrate the subtleties Format 0) Whats wrong with other descriptions patterns are always simple distinction between case, let, lambda, lazy patterns Sematics as translation introduces Variable introduction problem Guards are subtle, they may force unnecesary evaluation 1) Why a Monadic description? what monad? 2) Call by name vs lazy description 3) The meaning of patterns Different uses of patterns case, let, lambda Lazy patterns nested patterns 4) Guards 5) Other things Strict Data constructors newtypes and lifting 6) Type classes, suggestion library introduction transform 7)