LUCID, the dataflow programming language
LUCID, the dataflow programming language
LUSTRE: a declarative language for real-time programming
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Notions of computation and monads
Information and Computation
Implementation of the data-flow synchronous language SIGNAL
PLDI '95 Proceedings of the ACM SIGPLAN 1995 conference on Programming language design and implementation
Building domain-specific embedded languages
ACM Computing Surveys (CSUR) - Special issue: position statements on strategic directions in computing research
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Lava: hardware design in Haskell
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Science of Computer Programming - Special issue on mathematics of program construction
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Recursion from Cyclic Sharing: Traced Monoidal Categories and Models of Cyclic Lambda Calculi
TLCA '97 Proceedings of the Third International Conference on Typed Lambda Calculi and Applications
StreamIt: A Language for Streaming Applications
CC '02 Proceedings of the 11th International Conference on Compiler Construction
Modular Domain Specific Languages and Tools
ICSR '98 Proceedings of the 5th International Conference on Software Reuse
Haskell '03 Proceedings of the 2003 ACM SIGPLAN workshop on Haskell
Journal of Functional Programming
Towards a higher-order synchronous data-flow language
Proceedings of the 4th ACM international conference on Embedded software
Modeling user interfaces in a functional language
Modeling user interfaces in a functional language
ACM SIGGRAPH 2005 Electronic Art and Animation Catalog
Stream fusion: from lists to streams to nothing at all
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Plugging a Space Leak with an Arrow
Electronic Notes in Theoretical Computer Science (ENTCS)
Applicative programming with effects
Journal of Functional Programming
Switched-On Yampa: declarative programming of modular synthesizers
PADL'08 Proceedings of the 10th international conference on Practical aspects of declarative languages
The essence of dataflow programming
APLAS'05 Proceedings of the Third Asian conference on Programming Languages and Systems
AFP'04 Proceedings of the 5th international conference on Advanced Functional Programming
HPorter: using arrows to compose parallel processes
PADL'07 Proceedings of the 9th international conference on Practical Aspects of Declarative Languages
Combinators for message-passing in Haskell
PADL'11 Proceedings of the 13th international conference on Practical aspects of declarative languages
Joinads: a retargetable control-flow construct for reactive, parallel and concurrent programming
PADL'11 Proceedings of the 13th international conference on Practical aspects of declarative languages
Efficient and compositional higher-order streams
WFLP'10 Proceedings of the 19th international conference on Functional and constraint logic programming
Extending monads with pattern matching
Proceedings of the 4th ACM symposium on Haskell
A semantic model for graphical user interfaces
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Keeping calm in the face of change
Higher-Order and Symbolic Computation
Higher-order functional reactive programming in bounded space
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
PADL'10 Proceedings of the 12th international conference on Practical Aspects of Declarative Languages
Asynchronous functional reactive programming for GUIs
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Higher-order functional reactive programming without spacetime leaks
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
Arrows are a popular form of abstract computation. Being more general than monads, they are more broadly applicable, and in particular are a good abstraction for signal processing and dataflow computations. Most notably, arrows form the basis for a domain specific language called Yampa, which has been used in a variety of concrete applications, including animation, robotics, sound synthesis, control systems, and graphical user interfaces. Our primary interest is in better understanding the class of abstract computations captured by Yampa. Unfortunately, arrows are not concrete enough to do this with precision. To remedy this situation we introduce the concept of commutative arrows that capture a kind of non-interference property of concurrent computations. We also add an init operator, and identify a crucial law that captures the causal nature of arrow effects. We call the resulting computational model causal commutative arrows. To study this class of computations in more detail, we define an extension to the simply typed lambda calculus called causal commutative arrows (CCA), and study its properties. Our key contribution is the identification of a normal form for CCA called causal commutative normal form (CCNF). By defining a normalization procedure we have developed an optimization strategy that yields dramatic improvements in performance over conventional implementations of arrows. We have implemented this technique in Haskell, and conducted benchmarks that validate the effectiveness of our approach. When combined with stream fusion, the overall methodology can result in speed-ups of greater than two orders of magnitude.