Testing and Tracing Lazy Functional Programs Using QuickCheck and Hat

  • Koen Claessen
  • Colin Runciman
  • Olaf Chitil
  • John Hughes
  • Malcolm Wallace
Part of the Lecture Notes in Computer Science book series (LNCS, volume 2638)


It is a very undesirable situation that today’s software often contains errors. One motivation for using a functional programming language is that it is more difficult (or even impossible) to make low-level mistakes, and it is easier to reason about programs. But even the most advanced functional programmers are not infallible; they misunderstand the properties of their own programs, or those of others, and so commit errors.


Random Testing Test Data Generator Current Selection Conditional Property Congruence Property 
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. 1.
    Chitil, O., Runciman, C., Wallace, M.: Freja, Hat and Hood - a comparative evaluation of three systems for tracing and debugging lazy functional programs. In: Mohnen, M., Koopman, P. (eds.) IFL 2000. LNCS, vol. 2011, pp. 176–193. Springer, Heidelberg (2001)CrossRefGoogle Scholar
  2. 2.
    Chitil, O., Runciman, C., Wallace, M.: Transforming Haskell for tracing. In: Peña, R., Arts, T. (eds.) IFL 2002. LNCS, vol. 2670. Springer, Heidelberg (2003)CrossRefGoogle Scholar
  3. 3.
    Claessen, K., Hughes, J.: QuickCheck: a lightweight tool for random testing of Haskell programs. In: International Conference on Functional Programming, pp. 268–279. ACM, New York (2000)Google Scholar
  4. 4.
    Claessen, K., Hughes, J.: Testing monadic code with QuickCheck. In: Haskell Workshop. ACM, New York (2002)Google Scholar
  5. 5.
    Duran, J., Ntafos, S.: An evaluation of random testing. Transactions on Software Engineering 10(4), 438–444 (1984)CrossRefGoogle Scholar
  6. 6.
    Gill, A.: Debugging Haskell by observing intermediate datastructures. Electronic Notes in Theoretical Computer Science, vol. 41(1) (2001); Proc. 2000 ACM SIGPLAN Haskell WorkshopGoogle Scholar
  7. 7.
    Hamlet, D.: Random testing. In: Marciniak, J. (ed.) Encyclopedia of Software Engineering, pp. 970–978. Wiley, Chichester (1994)Google Scholar
  8. 8.
    Hamlet, R., Taylor, R.: Partition testing does not inspire confidence. Transactions on Software Engineering 16(12), 1402–1411 (1990)CrossRefMathSciNetGoogle Scholar
  9. 9.
    Herington, D.: HUnit 1.0 user’s guide (2002),
  10. 10.
    Moss, G.E.: Benchmarking purely functional data structures. PhD thesis, Dept. of Computer Science, University of York, UK (2000)Google Scholar
  11. 11.
    Moss, G.E., Runciman, C.: Inductive benchmarking for purely functional data structures. Journal of Functional Programming 11(5), 525–556 (2001)zbMATHCrossRefMathSciNetGoogle Scholar
  12. 12.
    Nilsson, H.: Declarative Debugging for Lazy Functional Languages. PhD thesis, Linköping University, Sweden (1998)Google Scholar
  13. 13.
    Sparud, J., Runciman, C.: Complete and partial redex trails of functional computations. In: Clack, C., Hammond, K., Davie, T. (eds.) IFL 1997. LNCS, vol. 1467, pp. 160–177. Springer, Heidelberg (1998)CrossRefGoogle Scholar
  14. 14.
    Sparud, J., Runciman, C.: Tracing lazy functional computations using redex trails. In: Hartel, P.H., Kuchen, H. (eds.) PLILP 1997. LNCS, vol. 1292, pp. 291–308. Springer, Heidelberg (1997)CrossRefGoogle Scholar
  15. 15.
    Wallace, M., Chitil, O., Brehm, T., Runciman, C.: Multipleview tracing for Haskell: a new Hat. In: Haskell Workshop. ACM, New York (September 2001)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2003

Authors and Affiliations

  • Koen Claessen
    • 1
  • Colin Runciman
    • 2
  • Olaf Chitil
    • 2
  • John Hughes
    • 1
  • Malcolm Wallace
    • 2
  1. 1.Chalmers University of TechnologySweden
  2. 2.University of YorkUnited Kingdom

Personalised recommendations