Results 1 -
5 of
5
Merging Monads and Folds for Functional Programming
- In Advanced Functional Programming, LNCS 925
, 1995
"... . These notes discuss the simultaneous use of generalised fold operators and monads to structure functional programs. Generalised fold operators structure programs after the decomposition of the value they consume. Monads structure programs after the computation of the value they produce. Our progra ..."
Abstract
-
Cited by 46 (2 self)
- Add to MetaCart
. These notes discuss the simultaneous use of generalised fold operators and monads to structure functional programs. Generalised fold operators structure programs after the decomposition of the value they consume. Monads structure programs after the computation of the value they produce. Our programs abstract both from the recursive processing of their input as well as from the side-effects in computing their output. We show how generalised monadic folds aid in calculating an efficient graph reduction engine from an inefficient specification. 1 Introduction Should I structure my program after the decomposition of the value it consumes or after the computation of the value it produces? Some [Bir89, Mee86, Mal90, Jeu90, MFP91] argue in favour of structuring programs after the decomposition of the value they consume. Such syntax directed programs are written using a limited set of recursion functionals. These functionals, called catamorphisms or generalised fold operators are naturally ...
Designing and Implementing Combinator Languages
- Third Summer School on Advanced Functional Programming, volume 1608 of LNCS
, 1999
"... this paper we will assume the availablity of a set of parsing combinators, that enables us to coinstruct such a mapping almost without e#ort. ..."
Abstract
-
Cited by 31 (7 self)
- Add to MetaCart
this paper we will assume the availablity of a set of parsing combinators, that enables us to coinstruct such a mapping almost without e#ort.
Software Design for Reliability and Reuse -- A Proof-Of-Concept Demonstration
- IN CONFERENCE ON TRI-ADA ’94
, 1994
"... The Pacific Software Research Center is developing a new method to support reuse and introduce reliability into software. The method is based on design capture in domain specific design languages and automatic program generation using a reusable suite of program transformation tools. The transformat ..."
Abstract
-
Cited by 15 (0 self)
- Add to MetaCart
The Pacific Software Research Center is developing a new method to support reuse and introduce reliability into software. The method is based on design capture in domain specific design languages and automatic program generation using a reusable suite of program transformation tools. The transformation tools, and a domain specific component generator incorporating them, are being implemented as part of a major project underway at the Oregon Graduate Institute of Science and Technology. The processes used in tool development and application of the method are being captured. Once completed, an experiment will be performed on the generator to assess its usability and flexibility. This paper describes the Software Design for Reliability and Reuse method and illustrates its application to the Message Translation and Validation domain, a problem identified by our sponsors so that our method can be compared directly to a previously existing state-of-the-art solution based on code templates pr...
Reactive Functional Programming
- Programming Concepts and Methods (PROCOMET 98). Chapman-Hall
, 1998
"... Reactive systems respond to concurrent, possibly unsynchronized streams of input events. Programming reactive systems is challenging without language support for event-triggered actions. It is even more challenging to reason about reactive systems. This paper explores a new conceptual basis for appl ..."
Abstract
-
Cited by 6 (1 self)
- Add to MetaCart
Reactive systems respond to concurrent, possibly unsynchronized streams of input events. Programming reactive systems is challenging without language support for event-triggered actions. It is even more challenging to reason about reactive systems. This paper explores a new conceptual basis for applying functional programming techniques to the design and formal veri#cation of reactive systems. The mathematical foundation for this approach is based upon signature coalgebras and derived proof rules for coinduction. The concepts are illustrated with an example that has been used with the language Esterel. 1 Introduction Reactive systems are characterized by sequences of history-determined reactions to external events. It is known that a non-strict functional programming language can provide a suitable linguistic vehicle for programming reactive systems because streams, modeling temporal sequences of values, can be represented. It is necessary to represent more than streams, however. Cur...
Internal Iteration Externalized
- In Rachid Guerraoui, editor, ECOOP '99 Object-Oriented Programming 13th European Conference, Lisbon Portugal
, 1999
"... Although it is acknowledged that internal iterators are easier and safer to use than conventional external iterators, it is commonly assumed that they are not applicable in languages without builtin support for closures and that they are less flexible than external iterators. We present an iteration ..."
Abstract
-
Cited by 5 (0 self)
- Add to MetaCart
Although it is acknowledged that internal iterators are easier and safer to use than conventional external iterators, it is commonly assumed that they are not applicable in languages without builtin support for closures and that they are less flexible than external iterators. We present an iteration framework that uses objects to emulate closures, separates structure exploration and data consumption, and generalizes on folding, thereby invalidating both the above statements. Our proposed "transfold" scheme allows processing one or more data structures simultaneously without exposing structure representations and without writing explicit loops. We show that the use of two functional concepts (function parameterization and lazy evaluation) within an object-oriented language allows combining the safety and economic usage of internal iteration with the flexibility and client control of external iteration. Sample code is provided using the statically typed EIFFEL language.

