A history of Haskell: being lazy with class
Proceedings of the third ACM SIGPLAN conference on History of programming languages
Supporting the creation of dynamic, interactive virtual environments
Proceedings of the 2007 ACM symposium on Virtual reality software and technology
Causal commutative arrows and their optimization
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Arrows, like Monads, are Monoids
Electronic Notes in Theoretical Computer Science (ENTCS)
Keeping calm in the face of change
Higher-Order and Symbolic Computation
Towards frabjous: a two-level system for functional reactive agent-based epidemic simulation
Proceedings of the 2nd ACM SIGHIT International Health Informatics Symposium
Journal of Functional Programming - Dedicated to ICFP 2009
Virtualizing real-world objects in FRP
PADL'12 Proceedings of the 14th international conference on Practical Aspects of Declarative Languages
Trends in Trends in Functional Programming 1999/2000 versus 2007/2008
Higher-Order and Symbolic Computation
Hi-index | 0.00 |
It is widely recognized that programs with Graphical User Interfaces (GUIs) are difficult to design and implement. One possible reason for this difficulty is the lack of any clear formal basis for GUI programming. GUI toolkit libraries are typically described only informally, in terms of implementation artifacts such as objects, imperative state and I/O systems. In this thesis, we develop Fruit, a Functional Reactive User Interface Toolkit. Fruit is based on Yampa, an adaptation of Functional Reactive Programming (FRP) to the Arrows computational framework. Yampa has a clear, simple formal semantics based on a synchronous dataflow model of computation. GUIs in Fruit are defined compositionally using only the Yampa model and formally tractable mouse, keyboard and picture types. Fruit and Yampa have been implemented as libraries for Haskell, a purely functional programming language. This thesis presents the semantics and implementations of Yampa and Fruit, and shows how they can be used to write concise executable specifications of common GUI programming idioms and complete GUI programs.