Abstract: This paper describes an efficient interpreter for lazy functional languages like Haskell and Clean. The interpreter is based on the elimination of algebraic data types and pattern-based function definitions by mapping them to functions using a new efficient variant of the Church encoding. The transformation is simple and yields concise code. We illustrate the concepts by showing how to map Haskell and Clean programs to the intermediate language SAPL (Simple Application Programming Language) consisting of pure functions only. An interpreter is described for SAPL, based on straightforward graph reduction techniques. This interpreter can be kept small and elegant because function application is the only operation in SAPL. The applica...