In Haskell, there are many data types that would form monads were it not for the presence of type-class constraints on the operations on that data type. This is a frustrating problem in practice, because there is a considerable amount of support and infrastructure for monads that these data types cannot use. This talk will demonstrate that a monadic computation can be restructured into a normal form such that the standard monad class can be used. The technique is not specific to monads --- it can also be applied to other structures, such as applicative functors. One significant use case for this technique is Domain Specific Languages, where it is often desirable to compile a deep embedding of a computation to some other language, which requires restricting the types that can appear in that computation.
Originally from England, I did my PhD in the Functional Programming Laboratory at the University of Nottingham, on the topic of Functional Reactive Programming. I moved to the University of Kansas last year, where I'm a post-doc in the Functional Programming Group. Most of my time is spent working on the HERMIT project, a toolkit for the interactive transformation of the Glasgow Haskell Compiler's core language. I'm principally a Haskell programmer, and my research interests include type systems, equational reasoning, domain-specific languages and program transformation. Webpage: ittc.ku.edu/~neil/