Proving Correctness of Programs with IO - A Paradigm Comparison

This paper discusses reasoning about IO operations in Haskell, Clean and C and compares the effect on ease of reasoning of the different approaches taken to IO in these languages. An IO system model is built using VDM? and is used to prove a basic property of a program written in each of the three languages. We tentatively draw the conclusions that functional languages are easier to reason about and that Monads can make the reasoning process slightly more difficult, but note that much future work is needed.

[1]  Simon L. Peyton Jones,et al.  The Implementation of Functional Programming Languages , 1987 .

[2]  Martin C. Henson Elements of Functional Languages , 1988 .

[3]  Peter D. Mosses,et al.  Denotational semantics , 1995, LICS 1995.

[4]  Andrew Donald Gordon,et al.  Functional programming and input/output , 1995 .

[5]  Cliff B. Jones,et al.  Systematic software development using VDM , 1986, Prentice Hall International Series in Computer Science.

[6]  Richard S. Bird,et al.  Introduction to functional programming , 1988, Prentice Hall International series in computer science.

[7]  Carroll Morgan,et al.  Programming from specifications (2nd ed.) , 1994 .

[8]  Erik Poll,et al.  Algebra of Programming by Richard Bird and Oege de Moor, Prentice Hall, 1996 (dated 1997). , 1999 .

[9]  Peter Achten,et al.  Proving the Temporal Properties of the Unique World , 1999 .

[10]  Philip Wadler,et al.  Monads for functional programming , 1995, NATO ASI PDC.

[11]  D. Le Métayer,et al.  Prospects for functional programming in software engineering , 1991, Research reports ESPRIT / project 302.

[12]  Arthur Hughes,et al.  Elements of an operator calculus , 2001 .

[13]  Simon Peyton Jones,et al.  The Implementation of Functional Programming Languages (Prentice-hall International Series in Computer Science) , 1987 .

[14]  Peter Achten,et al.  A tutorial to the Clean object I/O library : version 1.2 , 2000 .

[15]  Erik Barendsen,et al.  Uniqueness Typing for Functional Languages with Graph Rewriting Semantics , 1996, Math. Struct. Comput. Sci..

[16]  Joe Armstrong,et al.  Concurrent programming in ERLANG , 1993 .

[17]  Brian W. Kernighan,et al.  The C Programming Language , 1978 .