Designing regular array architectures using higher order functions
Proc. of a conference on Functional programming languages and computer architecture
The revised report on the syntactic theories of sequential control and state
Theoretical Computer Science
A natural semantics for lazy evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A functional theory of local names
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A call-by-need lambda calculus
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Let-floating: moving bindings to give faster programs
Proceedings of the first ACM SIGPLAN international conference on Functional programming
Building domain-specific embedded languages
ACM Computing Surveys (CSUR) - Special issue: position statements on strategic directions in computing research
Correctness of monadic state: an imperative call-by-need calculus
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Lava: hardware design in Haskell
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Improvement in a lazy context: an operational theory for call-by-need
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A transformation-based optimiser for Haskell
Science of Computer Programming - Special issue on the 6th European symposium on programming
From Transistors to Computer Architecture: Teaching Functional Circuit Specification in Hydra
FPLE '95 Proceedings of the First International Symposium on Functional Programming Languages in Education
Observable Properties of Higher Order Functions that Dynamically Create Local Names, or What's new?
MFCS '93 Proceedings of the 18th International Symposium on Mathematical Foundations of Computer Science
Generating Netlists from Executable Circuit Specifications
Proceedings of the 1992 Glasgow Workshop on Functional Programming
Reasoning about local variables with operationally-based logical relations
LICS '96 Proceedings of the 11th Annual IEEE Symposium on Logic in Computer Science
Deriving a lazy abstract machine
Journal of Functional Programming
Overview of Hydra: A Concurrent Language for Synchronous Digital Circuit Design
IPDPS '02 Proceedings of the 16th International Parallel and Distributed Processing Symposium
Combining Stream-Based and State-Based Verification Techniques
FMCAD '00 Proceedings of the Third International Conference on Formal Methods in Computer-Aided Design
Functional Design Using Behavioural and Structural Components
FMCAD '02 Proceedings of the 4th International Conference on Formal Methods in Computer-Aided Design
Proceedings of the 6th ACM SIGPLAN workshop on Generic programming
Nikola: embedding compiled GPU functions in Haskell
Proceedings of the third ACM Haskell symposium on Haskell
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
IFL'09 Proceedings of the 21st international conference on Implementation and application of functional languages
Embedding a proof system in haskell
CEFP'09 Proceedings of the Third summer school conference on Central European functional programming school
Explicitly recursive grammar combinators: a better model for shallow parser DSLs
PADL'11 Proceedings of the 13th international conference on Practical aspects of declarative languages
A calculus for hardware description*
Journal of Functional Programming
Design, implementation, and verification of an adaptable processor in lava HDL
ARC'11 Proceedings of the 7th international conference on Reconfigurable computing: architectures, tools and applications
QuickCheck: a lightweight tool for random testing of Haskell programs
ACM SIGPLAN Notices
WFLP'11 Proceedings of the 20th international conference on Functional and constraint logic programming
The design and implementation of feldspar an embedded language for digital signal processing
IFL'10 Proceedings of the 22nd international conference on Implementation and application of functional languages
PADL'10 Proceedings of the 12th international conference on Practical Aspects of Declarative Languages
Handshaking in kansas lava using patch logic
PADL'12 Proceedings of the 14th international conference on Practical Aspects of Declarative Languages
Processor design using a functional hardware description language
Microprocessors & Microsystems
Hardware design with generalized arrows
IFL'11 Proceedings of the 23rd international conference on Implementation and Application of Functional Languages
Abstract syntax graphs for domain specific languages
PEPM '13 Proceedings of the ACM SIGPLAN 2013 workshop on Partial evaluation and program manipulation
Using circular programs for higher-order syntax: functional pearl
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
An EDSL approach to high performance Haskell programming
Proceedings of the 2013 ACM SIGPLAN symposium on Haskell
Embrace, defend, extend: a methodology for embedding preexisting DSLs
Proceedings of the 1st annual workshop on Functional programming concepts in domain-specific languages
Hi-index | 0.00 |
Pure functional programming languages have been proposed as a vehicle to describe, simulate and manipulate circuit specifications. We propose an extension to Haskell to solve a standard problem when manipulating data types representing circuits in a lazy functional language. The problem is that circuits are finite graphs - but viewing them as an algebraic (lazy) datatype makes them indistinguishable from potentially infinite regular trees. However, implementations of Haskell do indeed represent cyclic structures by graphs. The problem is that the sharing of nodes that creates such cycles is not observable by any function which traverses such a structure. In this paper we propose an extension to call-by-need languages which makes graph sharing observable. The extension is based on non updatable reference cells and an equality test (sharing detection) on this type. We show that this simple and practical extension has well-behaved semantic properties, which means that many typical source-to-source program transformations, such as might be performed by a compiler, are still valid in the presence of this extension.