{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,8,27]],"date-time":"2025-08-27T15:56:37Z","timestamp":1756310197951},"reference-count":34,"publisher":"Cambridge University Press (CUP)","issue":"1","license":[{"start":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T00:00:00Z","timestamp":1226016000000},"content-version":"unspecified","delay-in-days":5059,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[1995,1]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>Functional programming languages have banned assignment because of its undesirable properties. The reward of this rigorous decision is that functional programming languages are side-effect free. There is another side to the coin: because assignment plays a crucial role in Input\/Output (I\/O), functional languages have a hard time dealing with I\/O. Functional programming languages have therefore often been stigmatised as <jats:italic>inferior to imperative programming languages because they cannot deal with I\/O very well<\/jats:italic>. In this paper, we show that I\/O can be incorporated in a functional programming language without loss of any of the generally accepted advantages of functional programming languages. This discussion is supported by an extensive account of the I\/O system offered by the lazy, purely functional programming language Clean. Two aspects that are paramount in its I\/O system make the approach novel with respect to other approaches. These aspects are the technique of <jats:italic>explicit multiple environment passing<\/jats:italic>, and the <jats:italic>Event I\/O framework<\/jats:italic> to program Graphical User I\/O in a highly structured and high-level way. Clean file I\/O is as powerful and flexible as it is in common imperative languages (one can read, write, and seek directly in a file). Clean Event I\/O provides programmers with a high-level framework to specify complex Graphical User I\/O. It has been used to write applications such as a window-based text editor, an object based drawing program, a relational database, and a spreadsheet program. These graphical interactive programs are completely machine independent, but still obey the look-and-feel of the concrete window environment being used. The specifications are completely functional and make extensive use of uniqueness typing, higher-order functions, and algebraic data types. Efficient implementations are present on the Macintosh, Sun (X Windows under Open Look) and PC (OS\/2).<\/jats:p>","DOI":"10.1017\/s0956796800001258","type":"journal-article","created":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T11:12:13Z","timestamp":1226056333000},"page":"81-110","source":"Crossref","is-referenced-by-count":42,"title":["The ins and outs of Clean I\/O"],"prefix":"10.1017","volume":"5","author":[{"given":"Peter","family":"Achten","sequence":"first","affiliation":[]},{"given":"Rinus","family":"Plasmeijer","sequence":"additional","affiliation":[]}],"member":"56","published-online":{"date-parts":[[2008,11,7]]},"reference":[{"key":"S0956796800001258_ref007","doi-asserted-by":"crossref","unstructured":"Barendsen E. and Smetsers J. E. W. (1993a) Conventional and uniqueness typing in graph rewrite systems. Technical Report CSI-R9328, Computing Science Institute, Department of Informatics, University of Nijmegen.","DOI":"10.1007\/3-540-57529-4_42"},{"key":"S0956796800001258_ref006","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-17945-3_8"},{"key":"S0956796800001258_ref017","unstructured":"Groningen J. H. G. van , N\u00f6cker E. G. J. M. H. and Smetsers J. E. W. (1991) Efficient heap management in the concrete ABC machine. In Glaser , Hartel (eds.) Proc. Third Int. Workshop on Implementation of Functional Languages on Parallel Architectures, Southampton, UK, Technical Report Series CSTR 91\u201307."},{"key":"S0956796800001258_ref016","doi-asserted-by":"publisher","DOI":"10.1109\/LICS.1990.113759"},{"key":"S0956796800001258_ref020","first-page":"17","volume-title":"Research Topics in Functional Programming","author":"Hughes","year":"1990"},{"key":"S0956796800001258_ref011","first-page":"139","volume-title":"Proc. ACM Conf. Lisp and Functional Programming","author":"Chirimar","year":"1992"},{"key":"S0956796800001258_ref019","first-page":"1","article-title":"Report on the programming language Haskell","volume":"27","author":"Hudak","year":"1992","journal-title":"ACM SigPlan Notices"},{"key":"S0956796800001258_ref029","volume-title":"Proc. Workshop Graph Transformations in Computer Science","author":"Smetsers","year":"1993"},{"key":"S0956796800001258_ref004","doi-asserted-by":"publisher","DOI":"10.1145\/359576.359579"},{"key":"S0956796800001258_ref028","doi-asserted-by":"publisher","DOI":"10.1007\/3540543961_28"},{"key":"S0956796800001258_ref008","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-57529-4_42"},{"key":"S0956796800001258_ref030","first-page":"249","volume-title":"Research Topics in Functional Programming","author":"Thompson","year":"1990"},{"key":"S0956796800001258_ref015","unstructured":"Gordon A. D. (1993) Functional programming and input\/output. PhD thesis, University of Cambridge Computer Laboratory, Technical Report No. 285."},{"key":"S0956796800001258_ref001","first-page":"1","volume-title":"Proc. Glasgow Workshop on Functional Programming","author":"Achten","year":"1993"},{"key":"S0956796800001258_ref032","volume-title":"Programming Concepts and Methods","author":"Wadler","year":"1990"},{"key":"S0956796800001258_ref034","doi-asserted-by":"crossref","first-page":"169","DOI":"10.1145\/73560.73575","volume-title":"Proc. Fifteenth Ann. ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages","author":"Williams","year":"1988"},{"key":"S0956796800001258_ref002","unstructured":"Achten P. M. and Plasmeijer M. J. (1993) The beauty and the beast. Technical Report No. 93\u201303, March 1993. Research Institute for Declarative Systems, Department of Informatics, Faculty of Mathematics and Informatics, University of Nijmegen."},{"key":"S0956796800001258_ref013","unstructured":"Eekelen M. C. J. D. van , Huitema H. S. , N\u00f6cker E. G. J. M. H. , Plasmeijer M. J. and Smetsers J. E. W. (1993) Concurrent Clean language manual \u2013 Version 0.8. Technical Report No. 93\u201313. Research Institute for Declarative Systems, Department of Informatics, University of Nijmegen."},{"key":"S0956796800001258_ref005","first-page":"219","volume-title":"Research Topics in Functional Programming","author":"Backus","year":"1990"},{"key":"S0956796800001258_ref009","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-18317-5_20"},{"key":"S0956796800001258_ref010","first-page":"9","volume-title":"Proc. Conf. Functional Programming Languages and Computer Architecture","author":"Carlsson","year":"1993"},{"key":"S0956796800001258_ref012","first-page":"371","volume-title":"Proc. Fourth Int. Conf. Functional Programming Languages and Computer Architecture","author":"Dwelly","year":"1989"},{"key":"S0956796800001258_ref014","doi-asserted-by":"publisher","DOI":"10.1016\/0304-3975(87)90045-4"},{"key":"S0956796800001258_ref022","doi-asserted-by":"crossref","first-page":"202","DOI":"10.1007\/3-540-54152-7_66","volume-title":"Proc. Parallel Architectures and Languages Europe","author":"N\u00f6cker","year":"1991"},{"key":"S0956796800001258_ref021","doi-asserted-by":"publisher","DOI":"10.1109\/LICS.1989.39155"},{"key":"S0956796800001258_ref023","unstructured":"Perry N. (1988) Functional I\/O \u2013 a solution. Department of Computing, Imperial College, London (Draft)."},{"key":"S0956796800001258_ref024","doi-asserted-by":"crossref","first-page":"71","DOI":"10.1145\/158511.158524","volume-title":"Proc. Twentieth Ann. ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages","author":"Peyton Jones","year":"1993"},{"key":"S0956796800001258_ref025","volume-title":"Functional Programming and Parallel Graph Rewriting","author":"Plasmeijer","year":"1993"},{"key":"S0956796800001258_ref026","volume-title":"Clean 1.0 Reference Manual, Technical Report","author":"Plasmeijer","year":"1994"},{"key":"S0956796800001258_ref031","first-page":"199","volume-title":"Research Topics in Functional Programming","author":"Turner","year":"1990"},{"key":"S0956796800001258_ref027","unstructured":"Redelmeier D. H. (1984) Towards practical functional programming. PhD thesis, Computer Systems Research Group, University of Toronto, May (Technical Report CSRG-158)."},{"key":"S0956796800001258_ref033","first-page":"61","volume-title":"Proc. ACM Conf. Lisp and Functional Programming","author":"Wadler","year":"1990"},{"key":"S0956796800001258_ref018","first-page":"177","volume-title":"Functional Programming and its Applications","author":"Henderson","year":"1982"},{"key":"S0956796800001258_ref003","unstructured":"Achten P. M. (1994) Operational semantics of Clean Event I\/O. Technical Report (in preparation). University of Nijmegen, The Netherlands."}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796800001258","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2019,5,14]],"date-time":"2019-05-14T16:10:29Z","timestamp":1557850229000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796800001258\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1995,1]]},"references-count":34,"journal-issue":{"issue":"1","published-print":{"date-parts":[[1995,1]]}},"alternative-id":["S0956796800001258"],"URL":"https:\/\/doi.org\/10.1017\/s0956796800001258","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[1995,1]]}}}