Theoretical Computer Science
Is there a use for linear logic?
PEPM '91 Proceedings of the 1991 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Imperative functional programming
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
TBAG: a high level framework for interactive, animated 3D graphics applications
SIGGRAPH '94 Proceedings of the 21st annual conference on Computer graphics and interactive techniques
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
The Haskell school of expression: learning functional programming through multimedia
The Haskell school of expression: learning functional programming through multimedia
Science of Computer Programming - Special issue on mathematics of program construction
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Functional reactive programming, continued
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Separation Logic: A Logic for Shared Mutable Data Structures
LICS '02 Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science
Local Reasoning about Programs that Alter Data Structures
CSL '01 Proceedings of the 15th International Workshop on Computer Science Logic
Haskell '03 Proceedings of the 2003 ACM SIGPLAN workshop on Haskell
Journal of Functional Programming
Strongly typed heterogeneous collections
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
Modeling user interfaces in a functional language
Modeling user interfaces in a functional language
Tangible functional programming
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Dependently typed programming in Agda
AFP'08 Proceedings of the 6th international conference on Advanced functional programming
Nettle: taking the sting out of programming network routers
PADL'11 Proceedings of the 13th international conference on Practical aspects of declarative languages
Wormholes: introducing effects to FRP
Proceedings of the 2012 Haskell Symposium
Hi-index | 0.00 |
We begin with a functional reactive programming (FRP) model in which every program is viewed as a signal function that converts a stream of input values into a stream of output values. We observe that objects in the real world --- such as a keyboard or sound card --- can be thought of as signal functions as well. This leads us to a radically different approach to I/O: instead of treating real-world objects as being external to the program, we expand the sphere of influence of program execution to include them within. We call this virtualizing real-world objects. We explore how virtual objects (such as GUI widgets) and even non-local effects (such as debugging and random number generation) can be handled in the same way. The key to our approach is the notion of a resource type that assures that a virtualized object cannot be duplicated, and is safe. Resource types also provide a deeper level of transparency: by inspecting the type, one can see exactly what resources are being used. We use arrows, type classes, and type families to implement our ideas in Haskell, and the result is a safe, effective, and transparent approach to stream-based I/O.