Elm : Concurrent FRP for Functional GUIs

Graphical user interfaces (GUIs) mediate almost all of our interactions with computers, whether it is through web pages, phone apps, or desktop applications. Functional Reactive Programming (FRP) is a promising approach to GUI design. This thesis presents Elm, a concurrent FRP language focused on easily creating responsive GUIs. Elm has two major features: (1) purely functional graphical layout and (2) support for Concurrent FRP. Purely functional graphical layout is a high level framework for working with complex visual components. It makes it quick and easy to create and combine text, images, and video into rich multimedia displays. Concurrent FRP solves some of FRP’s long-standing efficiency problems: global delays and needless recomputation. Together, Elm’s two major features simplify the complicated task of creating responsive and usable graphical user interfaces. This thesis also includes a fully functional compiler for Elm, available at elm-lang.org. This site includes an interactive code editor that allows you to write and compile Elm programs online with no download or install.

[1]  Emden R. Gansner,et al.  A foundation for user interface construction , 1992 .

[2]  Shriram Krishnamurthi,et al.  Lowering: a static optimization technique for transparent functional reactivity , 2007, PEPM '07.

[3]  Paul Hudak,et al.  Functional reactive programming from first principles , 2000, PLDI '00.

[4]  Henrik Nilsson,et al.  Dynamic optimization for functional reactive programming using generalized algebraic data types , 2005, ICFP '05.

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

[6]  Sam Toueg,et al.  A Modular Approach to Fault-Tolerant Broadcasts and Related Problems , 1994 .

[7]  John H. Reppy,et al.  Concurrent programming in ML , 1999 .

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

[9]  Paul Hudak,et al.  Modular domain specific languages and tools , 1998, Proceedings. Fifth International Conference on Software Reuse (Cat. No.98TB100203).

[10]  Paul Hudak,et al.  Causal commutative arrows and their optimization , 2009, ICFP.

[11]  Henrik Nilsson,et al.  Switched-On Yampa Declarative Programming of Modular Synthesizers , 2007 .

[12]  Henrik Nilsson,et al.  Functional reactive programming, continued , 2002, Haskell '02.

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

[14]  Paul Hudak,et al.  Real-time FRP , 2001, ICFP '01.

[15]  Nick Benton,et al.  Ultrametric Semantics of Reactive Programs , 2011, 2011 IEEE 26th Annual Symposium on Logic in Computer Science.

[16]  Antony Courtney,et al.  Frappé: Functional Reactive Programming in Java , 2001, PADL.

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

[18]  Emden R. Gansner,et al.  The eXene Library Manual , 1991 .

[19]  Paul Hudak,et al.  Event-Driven FRP , 2002, PADL.

[20]  Henrik Nilsson,et al.  Safe functional reactive programming through dependent types , 2009, ICFP.

[21]  Umut A. Acar,et al.  Implicit self-adjusting computation for purely functional programs , 2014, J. Funct. Program..

[22]  Conor McBride,et al.  Applicative programming with effects , 2008, J. Funct. Program..

[23]  Shriram Krishnamurthi,et al.  Flapjax: a programming language for Ajax applications , 2009, OOPSLA 2009.

[24]  Siau-Cheng Khoo,et al.  Compiling real time functional reactive programming , 2002, ASIA-PEPM '02.

[25]  Paul Hudak,et al.  Plugging a Space Leak with an Arrow , 2007, Festschrift honoring Gary Lindstrom.

[26]  Meurig Sage FranTk - a declarative GUI language for Haskell , 2000, ICFP '00.

[27]  Conal Elliott,et al.  Push-pull functional reactive programming , 2009, Haskell.

[28]  Emden R. Gansner,et al.  A foundation for programming environments , 1987, SDE 2.

[29]  Alley Stoughton,et al.  On the Future of eXene , 2005 .

[30]  Emden R. Gansner,et al.  A multi-threaded higher-order user interface toolkit , 1993 .

[31]  Gregory D. Hager,et al.  System Presentation - Functional Reactive Robotics: An Exercise in Principled Integration of Domain-Specific Languages , 2002 .

[32]  Andrew W. Appel,et al.  Compiling with Continuations , 1991 .

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