Abstract:
Invertible programming occurs in the area of data conversion where it is required that the conversion in one direction is the inverse of the other. For that purpose, we introduce bidirectional arrows (bi- arrows). The bi-arrow class is an extension of Haskell's arrow class with an extra combinator that changes the direction of computation. The advantage of the use of bi-arrows for invertible programming is the preservation of invertibility properties using the biarrow combinators. Programming with bi-arrows in a polytypic or generic way exploits this the most. Besides bidirectional polytypic examples, including invertible serialization, we give the definition of a monadic bi-arrow transformer, which we use to construct a bidirectional parser/pretty printer.
Citations
|
1122
|
Introduction to Functional Programming
– Bird, Wadler
- 1988
|
|
104
|
Derivable Type Classes
– Hinze, Jones
- 2001
|
|
87
|
Generalising monads to arrows
– Hughes
- 2000
|
|
55
|
Exploring Generic Haskell
– Löh
- 2004
|
|
52
|
Combinators for bi-directional tree transformations: A linguistic approach to the view update problem
– Foster, Greenwald, et al.
- 2007
|
|
45
|
A Generic Programming Extension for Clean
– Alimarine, Plasmeijer
- 2002
|
|
29
|
Arrows, robots, and functional reactive programming
– Hudak, Courtney, et al.
- 2003
|
|
29
|
et al. Report of the programming language Haskell98. a non-strict, purely functional language
– Jones, Hughes
- 1999
|
|
26
|
A new notation for arrows
– Paterson
- 2001
|
|
23
|
Genuinely functional user interfaces
– Courtney, Elliott
- 2001
|
|
23
|
Eekelen. Concurrent CLEAN Language Report (version 2.0
– Plasmeijer, van
- 2001
|
|
20
|
Polytypic data conversion programs
– Jansson, Jeuring
|
|
18
|
Polytypic compact printing and parsing
– Jansson, Jeuring
- 1999
|
|
17
|
Program inversion: More than fun
– Chen, Udding
- 1990
|
|
13
|
An algebraic approach to bi-directional updating
– Mu, Hu, et al.
- 2004
|
|
11
|
Program inversion
– DIJKSTRA
- 1979
|
|
8
|
Running Programs Backwards: The Logical Inversion of Imperative Computation
– Ross
- 1997
|
|
7
|
Arrows and computation
– Paterson
- 2003
|
|
6
|
Derivation of deterministic inverse programs based on LR parsing
– Glück, Kawabe
- 2004
|
|
4
|
A gentle introduction to Haskell 98. http://www.haskell.org/tutorial
– Hudak, Peterson, et al.
- 1999
|
|
1
|
Revisiting an automatic program inverter for lisp
– Glück, Kawabe
- 2005
|