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
Communications of the ACM
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Template meta-programming for Haskell
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Polytypic Compact Printing and Parsing
ESOP '99 Proceedings of the 8th European Symposium on Programming Languages and Systems
Lambda in Motion: Controlling Robots with Haskell
PADL '99 Proceedings of the First International Workshop on Practical Aspects of Declarative Languages
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
Closed Freyd- and kappa-categories
ICAL '99 Proceedings of the 26th International Colloquium on Automata, Languages and Programming
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
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
Lowering: a static optimization technique for transparent functional reactivity
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
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
Modularity vs. reusability: code generation from synchronous block diagrams
Proceedings of the conference on Design, automation and test in Europe
Modular code generation from synchronous block diagrams: modularity vs. code size
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Modular static scheduling of synchronous data-flow networks: an efficient symbolic representation
EMSOFT '09 Proceedings of the seventh ACM international conference on Embedded software
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
PADL'10 Proceedings of the 12th international conference on Practical Aspects of Declarative Languages
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
Wormholes: introducing effects to FRP
Proceedings of the 2012 Haskell Symposium
Hi-index | 0.02 |
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 noninterference property of concurrent computations. We also add an init operator that captures the causal nature of arrow effects, and identify its associated law. To study this class of computations in more detail, we define an extension to arrows 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 compiled with the Glasgow Haskell Compiler (GHC), the overall methodology can result in significant speedups.