EditorArrow: An arrow-based model for editor-based programming

State-based interactive applications, whether they run on the desktop or as a web application, can be considered as collections of interconnected editors of structured values that allow users to manipulate data. This is the view that is advocated by the GEC and iData toolkits, which offer a high level of abstraction to programming desktop and web GUI applications respectively. Special features of these toolkits are that editors have shared, persistent state, and that they handle events individually. In this paper we cast these toolkits within the Arrow framework and present EditorArrow: a single, unified semantic model that defines shared state and event handling. We study the properties of EditorArrow, and of editors in particular. Furthermore, we present the definedness properties of the combinators. A reference implementation of the EditorArrow model is given with some small program examples. We discuss formal reasoning about the model using the proof assistant Sparkle. The availability of this tool has proved to be indispensable in this endeavor.

[1]  Marinus J. Plasmeijer,et al.  Generic Editors for the World Wide Web , 2005, CEFP.

[2]  Rinus Plasmeijer,et al.  The Implementation of iData - A Case Study in Generic Programming , 2006 .

[3]  Marko C. J. D. van Eekelen,et al.  Automatic Generation of Editors for Higher-Order Data Structures , 2004, APLAS.

[4]  Ross Paterson,et al.  A new notation for arrows , 2001, ICFP '01.

[5]  Marko C. J. D. van Eekelen,et al.  Graph Rewriting Semantics for Functional Programming Languages , 1996, CSL.

[6]  Marinus J. Plasmeijer,et al.  A Conference Management System Based on the iData Toolkit , 2006, IFL.

[7]  B. Schneiderman,et al.  Designing the User Interface. Strategies for Effective Human-Computer Interaction , 1992 .

[8]  Marinus J. Plasmeijer,et al.  Theorem Proving for functional Programmers - Sparkle: A Functional Theorem Prover , 2001 .

[9]  Jan Friso Groote,et al.  Algebraic Process Verification , 2001, Handbook of Process Algebra.

[10]  Antony Courtney,et al.  Genuinely Functional User Interfaces , 2001 .

[11]  C. A. R. Hoare,et al.  Communicating sequential processes , 1978, CACM.

[12]  Paul Hudak,et al.  Functional reactive animation , 1997, ICFP '97.

[13]  Barbara G. Ryder,et al.  Proceedings of the third ACM SIGPLAN conference on History of programming languages , 2007 .

[14]  Michael Hanus,et al.  Type-oriented construction of web user interfaces , 2006, PPDP '06.

[15]  Marinus J. Plasmeijer,et al.  iData for the World Wide Web - Programming Interconnected Web Forms , 2006, FLOPS.

[16]  Marko C. J. D. van Eekelen,et al.  Generic Graphical User Interfaces , 2003, IFL.

[17]  Pieter Koopman,et al.  Exchanging sources between clean and Haskell: a double-edged front end for the clean compiler , 2010 .

[18]  John Hughes,et al.  Generalising monads to arrows , 2000, Sci. Comput. Program..

[19]  Marko C. J. D. van Eekelen,et al.  Proof Tool Support for Explicit Strictness , 2005, IFL.

[20]  Peter Thiemann,et al.  WASH/CGI: Server-Side Web Scripting with Sessions and Typed, Compositional Forms , 2002, PADL.

[21]  Marko C. J. D. van Eekelen,et al.  GEC: A Toolkit for Generic Rapid Prototyping of Type Safe Interactive Applications , 2004, Advanced Functional Programming.

[22]  M.C.J.D. van Eekelen,et al.  Proof Support for General Type Classes , 2004 .

[23]  Marko C. J. D. van Eekelen,et al.  Reasoning About Deterministic Concurrent Functional I/O , 2004, IFL.

[24]  Henrik Nilsson,et al.  The Yampa arcade , 2003, Haskell '03.

[25]  Robert Cartwright,et al.  The semantics of lazy (and industrious) evaluation , 1982, LFP '82.

[26]  Ben Shneiderman,et al.  Designing the user interface - strategies for effective human-computer interaction, 2nd Edition , 1992 .

[27]  Robin Milner,et al.  A Calculus of Communicating Systems , 1980, Lecture Notes in Computer Science.

[28]  Jos C. M. Baeten,et al.  Process Algebra , 2007, Handbook of Dynamic System Modeling.

[29]  Marko C. J. D. van Eekelen,et al.  Compositional Model-Views with Generic Graphical User Interfaces , 2004, PADL.

[30]  M. J. de Mol,et al.  Reasoning about functional programs : Sparkle, a proof assistant for Clean , 2009 .

[31]  Simon L. Peyton Jones,et al.  A history of Haskell: being lazy with class , 2007, HOPL.

[32]  Marko C. J. D. van Eekelen,et al.  Keep it clean: a unique approach to functional programming. , 1999, SIGP.

[33]  Marko C. J. D. van Eekelen,et al.  Proving Properties of Lazy Functional Programs with Sparkle , 2007, CEFP.

[34]  Paul Hudak,et al.  Modeling user interfaces in a functional language , 2004 .

[35]  Magnus Carlsson,et al.  Fudgets - Purely Functional Processes with applications to Graphical User Interfaces , 1998 .

[36]  J. Bergstra,et al.  Handbook of Process Algebra , 2001 .

[37]  Paul Hudak,et al.  Arrows, Robots, and Functional Reactive Programming , 2002, Advanced Functional Programming.

[38]  Mats Carlsson,et al.  FUDGETS: a graphical user interface in a lazy functional language , 1993, FPCA '93.