  Haskell is a popular choice for hosting deeply embedded languages. A
recurring challenge for these embeddings is how to seamlessly integrate user
defined algebraic data types. In particular, one important, convenient, and
expressive feature for creating and inspecting data -- pattern matching -- is
not directly available on embedded terms. We present a novel technique,
embedded pattern matching, which enables a natural and user friendly embedding
of user defined algebraic data types into the embedded language, and allows
programmers to pattern match on terms in the embedded language in much the same
way they would in the host language.
