11 CONCLUSIONS
The concept of zoetic data arises from the
observation that much of the complexity of
programming arises from the need to interpret
characteristic behaviours for symbolic data each
time they are used. Strict adherence to the principle
of separation of concerns however indicates that this
problem would be addressed by decoupling the
definition of datatypes from their various
applications.
In our “totally functional” approach to
programming this separation is achieved by
replacing constructors of symbolic data with zoetic
data generators that produce functional
representations of data that embody the
characteristic behaviours inherent to each datatype.
Specific characteristic behaviours arise from
application of generic catamorphic patterns to
operands that have the effect of defining a more
specialised catamorphism. If however such specific
behaviour isn’t articulated, the catamorphic pattern
for the underlying regular algebraic type is itself the
characteristic behaviour. From these bases the zoetic
generators arise as formally-derived counterparts to
symbolic data constructors, thus completely
bypassing symbolic data and their interpreters.
ACKNOWLEDGEMENTS
We gratefully acknowledge our various colleagues’
contributions over the years to our ongoing work
reflected here, especially those of Leighton Brough.
REFERENCES
Abelson, H., Sussman G.J. and Sussman, J., 1996.
Structure and Interpretation of Computer Programs
2nd ed. MIT Press.
Backhouse, R., Jansson, P., Jeuring, J. and L. Meertens,
1999. Generic Programming - An Introduction. In S.
Swierstra, S., Henriques, P. and Oliveira, J. (eds.),
Advanced Functional Programming, LNCS, vol. 1608,
pp. 28-115.
Bailes, P. and Brough, L., 2012. Making Sense of
Recursion Patterns. In Proc. 1
st
FormSERA: Rigorous
and Agile Approaches, IEEE, pp. 16-22.
Barendregt, H., 1984. The Lambda Calculus - Its Syntax
and Semantics 2nd ed., North-Holland, Amsterdam.
Bird R. and Wadler, P., 1988. Introduction to Functional
Programming, Prentice-Hall International.
Coq Proof Assistant, https://coq.inria.fr/, accessed 22
February 2016.
Collins English Dictionary, http://www.collinsdictionary.
com, accessed 4 July 2014.
Dijkstra, E., 1982. On the role of scientific thought. In
Selected writings on Computing: A Personal
Perspective, pp. 60-66. Springer-Verlag, New York.
Gibbons, J., Hutton G. and Altenkirch, T., 2001. When is a
function a fold or an unfold?. In Electronic Notes in
Theoretical Computer Science, vol. 44 (1).
Haskell Platform, http://www.haskell.org/platform/,
accessed 4 July 2014.
Haskell Programming Language, http://www.haskell.org,
accessed 4 July 2014.
Hughes, J., Why Functional Programming Matters, 1989.
In The Computer Journal, vol. 32 (2), pp. 98-107.
Hutton, G., 1992. Higher-order functions for parsing. In
Journal of Functional Programming, vol. 2, 1992, pp.
323-343.
Hutton, G., 1999, A Tutorial on the Universality and
Expressiveness of Fold. In Journal of Functional
Programming, vol. 9, pp. 355-372.
Meijer, E., Fokkinga, M. and Paterson, R., 1991.
Functional Programming with Bananas, Lenses,
Envelopes, and Barbed Wire. In Proc. FPCA 1991,
LNCS vol. 523, pp. 142-144.
Milner, R., 1977. A Theory of Type Polymorphism in
Programming. In J. Comp. Syst. Scs., vol. 17, pp. 348-
375.
Reynolds, J., 1985. Three approaches to type structure”. In
Mathematical Foundations of Software Development,
LNCS, vol. 185, pp. 97-138.
Turner, D.A, 2004. Total Functional Programming. In
Journal of Universal Computer Science, vol. 10, no. 7,
pp. 751-768.
Uustalu, T., Vene, V. and Pardo, A., 2001. Recursion
Schemes from Comonads. In Nordic J. of Comput.,
vol. 8 (3), pp. 366-390.
Vytiniotis, D., Weirich, S. and Jones, S.L.P., 2006. Boxy
types: inference for higher-rank types and
impredicativity. In Proc. ICFP, pp. 251-262.
Wadler, P., 1985. How to Replace Failure by a List of
Successes. In Proc. FPCA 1985, LNCS, vol. 201, pp.
113-128.