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.