A Programming Tutor for Haskell

  • Johan Jeuring
  • Alex Gerdes
  • Bastiaan Heeren
Part of the Lecture Notes in Computer Science book series (LNCS, volume 7241)


In these lectures we will introduce an interactive system that supports writing simple functional programs. Using this system, students learning functional programming:
  • develop their programs incrementally,

  • receive feedback about whether or not they are on the right track,

  • can ask for a hint when they are stuck,

  • see how a complete program is stepwise constructed,

  • get suggestions about how to refactor their program.

The system itself is implemented as a functional program, and uses fundamental concepts such as rewriting, parsing, strategies, program transformations and higher-order combinators such as the fold. We will introduce these concepts, and show how they are used in the implementation of the interactive functional programming tutor.


Minor Rule Functional Programming Tutoring System Intelligent Tutoring System Concrete Syntax 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. Anderson, J.R., Conrad, F.G., Corbett, A.T.: Skill acquisition and the LISP tutor. Cognitive Science 13, 467–505 (1986)CrossRefGoogle Scholar
  2. Back, R.-J.: A calculus of refinements for program derivations. In: Reports on Computer Science and Mathematics 54. Åbo Akademi (1987)Google Scholar
  3. Berger, U., Eberl, M., Schwichtenberg, H.: Normalization by Evaluation. In: Möller, B., Tucker, J.V. (eds.) Prospects for Hardware Foundations. LNCS, vol. 1546, pp. 117–137. Springer, Heidelberg (1998)CrossRefGoogle Scholar
  4. Bergstra, J.A., Klop, J.W.: Algebra of communicating processes with abstraction. Theoretical Computer Science 37, 77–121 (1985)MathSciNetCrossRefzbMATHGoogle Scholar
  5. Bird, R.S.: An introduction to the theory of lists. In: Broy, M. (ed.) Logic of Programming and Calculi of Discrete Design. NATO ASI Series, vol. F36, pp. 5–42. Springer (1987)Google Scholar
  6. Brown, J.S., Burton, R.R.: Diagnostic models for procedural bugs in basic mathematical skills. Cognitive Science 2, 155–192 (1978)CrossRefGoogle Scholar
  7. Bundy, A.: The Computer Modelling of Mathematical Reasoning. Academic Press (1983)Google Scholar
  8. Dijkstra, E.W.: Guarded commands, nondeterminacy and formal derivation of programs. Commun. ACM 18, 453–457 (1975)MathSciNetCrossRefzbMATHGoogle Scholar
  9. Felleisen, M., Findler, R.B., Flatt, M., Krishnamurthi, S.: How to design programs: an introduction to programming and computing. MIT Press, Cambridge (2002)zbMATHGoogle Scholar
  10. Filinski, A., Rohde, H.K.: A Denotational Account of Untyped Normalization by Evaluation. In: Walukiewicz, I. (ed.) FOSSACS 2004. LNCS, vol. 2987, pp. 167–181. Springer, Heidelberg (2004)CrossRefGoogle Scholar
  11. Fincher, S., Petre, M. (eds.): Computer Science Education Research. RoutledgeFalmer (2004)Google Scholar
  12. Fokker, J.: Functional Parsers. In: Jeuring, J., Meijer, E. (eds.) AFP 1995. LNCS, vol. 925, pp. 1–23. Springer, Heidelberg (1995)CrossRefGoogle Scholar
  13. Fokkink, W.: Introduction to Process Algebra. Springer (2000) ISBN 354066579XGoogle Scholar
  14. Gerdes, A., Heeren, B., Jeuring, J., Stuurman, S.: Feedback services for exercise assistants. In: Remenyi, D. (ed.) ECEL 2007: Proceedings of the 7th European Conference on e-Learning, pp. 402–410. Academic Publishing Limited (2008); Also available as Technical report Utrecht University UU-CS-2008-018Google Scholar
  15. Gerdes, A., Jeuring, J., Heeren, B.: Using strategies for assessment of programming exercises. In: Lewandowski, G., Wolfman, S.A., Cortina, T.J., Walker, E.L. (eds.) SIGCSE, pp. 441–445. ACM (2010)Google Scholar
  16. Gerdes, A., Jeuring, J., Heeren, B.: Teachers and students in charge — using annotated model solutions in a functional programming tutor. Technical report, Utrecht University, Department of Computer Science (to appear, 2012)Google Scholar
  17. Guzdial, M.: Programming environments for novices. In: Fincher, S., Petre, M. (eds.) Computer Science Education Research. RoutledgeFalmer (2004)Google Scholar
  18. Hattie, J., Timperley, H.: The power of feedback. Review of Educational Research 77(1), 81–112 (2007)CrossRefGoogle Scholar
  19. Heeren, B., Jeuring, J.: Recognizing strategies. In: Middeldorp, A. (ed.) WRS 2008: Reduction Strategies in Rewriting and Programming, 8th International Workshop (2008)Google Scholar
  20. Heeren, B., Jeuring, J.: Canonical Forms in Interactive Exercise Assistants. In: Carette, J., Dixon, L., Coen, C.S., Watt, S.M. (eds.) Calculemus/MKM 2009. LNCS (LNAI), vol. 5625, pp. 325–340. Springer, Heidelberg (2009)CrossRefGoogle Scholar
  21. Heeren, B., Jeuring, J.: Adapting Mathematical Domain Reasoners. In: Autexier, S., Calmet, J., Delahaye, D., Ion, P.D.F., Rideau, L., Rioboo, R., Sexton, A.P. (eds.) AISC/Calculemus/MKM 2010. LNCS (LNAI), vol. 6167, pp. 315–330. Springer, Heidelberg (2010)CrossRefGoogle Scholar
  22. Heeren, B., Jeuring, J.: Interleaving Strategies. In: Davenport, J.H., Farmer, W.M., Urban, J., Rabe, F. (eds.) Calculemus/MKM 2011. LNCS (LNAI), vol. 6824, pp. 196–211. Springer, Heidelberg (2011)CrossRefGoogle Scholar
  23. Heeren, B., Leijen, D., van IJzendoorn, A.: Helium, for learning Haskell. In: Haskell 2003: Proceedings of the 2003 ACM SIGPLAN Workshop on Haskell, pp. 62–71. ACM (2003)Google Scholar
  24. Heeren, B., Jeuring, J., van Leeuwen, A., Gerdes, A.: Specifying Strategies for Exercises. In: Autexier, S., Campbell, J., Rubio, J., Sorge, V., Suzuki, M., Wiedijk, F. (eds.) AISC/Calculemus/MKM 2008. LNCS (LNAI), vol. 5144, pp. 430–445. Springer, Heidelberg (2008)CrossRefGoogle Scholar
  25. Hoare, C.A.R.: An axiomatic basis for computer programming. Commun. ACM 12, 576–580 (1969)CrossRefzbMATHGoogle Scholar
  26. Hoare, C.A.R.: Communicating sequential processes. Prentice-Hall, Inc. (1985) ISBN 0-13-153271-5Google Scholar
  27. Hong, J.: Guided programming and automated error analysis in an intelligent Prolog tutor. International Journal on Human-Computer Studies 61(4), 505–534 (2004)CrossRefGoogle Scholar
  28. Huet, G.: Functional Pearl: The Zipper. Journal of Functional Programming 7(5), 549–554 (1997)MathSciNetCrossRefzbMATHGoogle Scholar
  29. Hutton, G.: Higher-order Functions for Parsing. Journal of Functional Programming 2(3), 323–343 (1992)MathSciNetCrossRefzbMATHGoogle Scholar
  30. Meertens, L.: Algorithmics — towards programming as a mathematical activity. In: Proceedings of the CWI Symposium on Mathematics and Computer Science. CWI Monographs, vol. 1, pp. 289–334. North–Holland (1986)Google Scholar
  31. van Merriënboer, J.J.G., Paas, F.G.W.C.: Automation and schema acquisition in learning elementary computer programming: Implications for the design of practice. Computers in Human Behavior 6, 273–289 (1990)CrossRefGoogle Scholar
  32. Miller, P., Pane, J., Meter, G., Vorthmann, S.: Evolution of Novice Programming Environments: The Structure Editors of Carnegie Mellon University. Interactive Learning Environments 4(2), 140–158 (1994)CrossRefGoogle Scholar
  33. Morgan, C.: Programming from specifications. Prentice-Hall, Inc. (1990)Google Scholar
  34. Jones, S.P., et al.: Haskell 98, Language and Libraries. The Revised Report. Cambridge University Press (2003); A special issue of the Journal of Functional Programming,
  35. Soloway, E.: From problems to programs via plans: the content and structure of knowledge for introductory LISP programming. Journal of Educational Computing Research 1(2), 157–172 (1985)CrossRefGoogle Scholar
  36. Doaitse Swierstra, S., Duponcheel, L.: Deterministic, Error-correcting Combinator Parsers. In: Launchbury, J., Meijer, E., Sheard, T. (eds.) AFP 1996. LNCS, vol. 1129, pp. 184–207. Springer, Heidelberg (1996)CrossRefGoogle Scholar
  37. Doaitse Swierstra, S.: Combinator Parsing: A Short Tutorial. In: Bove, A., Barbosa, L.S., Pardo, A., Pinto, J.S. (eds.) Language Engineering and Rigorous Software Development. LNCS, vol. 5520, pp. 252–300. Springer, Heidelberg (2009)CrossRefGoogle Scholar
  38. VanLehn, K.: The behavior of tutoring systems. International Journal on Artificial Intelligence in Education 16(3), 227–265 (2006)Google Scholar
  39. Vanlehn, K., Lynch, C., Schulze, K., Shapiro, J.A., Shelby, R., Taylor, L., Treacy, D., Weinstein, A., Wintersgill, M.: The andes physics tutoring system: Lessons learned. International Journal on Artificial Intelligence in Education 15, 147–204 (2005)zbMATHGoogle Scholar
  40. Xu, S., Chee, Y.S.: Transformation-based diagnosis of student programs for programming tutoring systems. IEEE Transactions on Software Engineering 29(4), 360–384 (2003)CrossRefGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2012

Authors and Affiliations

  • Johan Jeuring
    • 1
    • 2
  • Alex Gerdes
    • 1
  • Bastiaan Heeren
    • 1
  1. 1.School of Computer ScienceOpen Universiteit NederlandHeerlenThe Netherlands
  2. 2.Department of Information and Computing SciencesUniversiteit UtrechtThe Netherlands

Personalised recommendations