This program is an reimplementation in Haskell 98 of Guy L. Steele, Jr. Building interpreters by composing monads. In Conference Record of POPL '94: 21st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Portland, Oregon, January 17-21, 1994, pages 472-492, New York, 1994. ACM Press. @inproceedings = { steele-building, author = "Steele, Jr., Guy L.", title = "Building Interpreters by Composing Monads", booktitle = "Conference record of {POPL} '94, 21st {ACM {SIGPLAN}-{SIGACT}} Symposium on Principles of Programming Languages: Portland, Oregon, January 17--21, 1994", publisher = "ACM Press", address = "New York, NY, USA", editor = "{ACM}", isbn = "0-89791-636-0", pages = "472--492", year = "1994", url = "citeseer.nj.nec.com/steele94building.html http://www.swiss.ai.mit.edu/~dae/related-papers/steele.ps.Z" } My reimplementation uses constructor classes in Haskell 98 to avoid the need for a program simplifier such as the one Steele described in his paper. I have tested my code using the Glasgow Haskell Compiler. To compile, say ghc --make -fglasgow-exts -package util Main -lreadline # for GHC 5 ghc --make -fglasgow-exts -package readline Main # for GHC 6 I hope this reimplementation helps people study Steele's inspiring work. It has certainly helped me. I would also appreciate any feedback! Finally, thanks to all participants in CS 252r: Advanced Functional Programming, Spring 2001, Harvard University, for motivation and insight. Chung-chieh Shan , 2001-04-30 http://www.cs.rutgers.edu/~ccshan/