Abstract
Traditional higher-order functional programming is validated by how its logical conclusion in the shape of a “Totally Functional” style is consistent with and indeed determined by some fundamental principles of Software Engineering. The key to Totally Functional Programming is the notion of “zoetic” representations of data which embody the behaviours that we hypothesise to underlie all conventional symbolic datatypes. These representations minimise the interpretation of symbolic data at each use, and thus embody the principle of reuse. Further, we develop a scheme for formal synthesis of generator functions for zoetic data which entirely avoid the need for a separate interpretation stage. This avoidance allows us to achieve a clear separation of concerns between the creation of zoetic data objects on the one hand and their use in various applications on the other. Zoetic data are thus validated as the key enablers of the fulfilment of functional programming in its “Totally Functional” manifestation, firmly grounded in the language design consequences of software engineering principles.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Similar content being viewed by others
References
Hughes, J.: Why functional programming matters. Comput. J. 32(2), 98–107 (1989)
Bird, R., Wadler, P.: Introduction to Functional Programming. Prentice-Hall International, Upper Saddle River (1988)
Abelson, H., Sussman, G.J., Sussman, J.: Structure and Interpretation of Computer Programs, 2nd edn. MIT Press, Cambridge (1996)
Collins English Dictionary. http://www.collinsdictionary.com. Accessed 4 July 2014
Sommerville, I.: Software Engineering, 8th edn. Addison Wesley, Boston (2007)
Sommerville, I.: Software Engineering, 10th edn. Pearson, Essex (2015)
Meyer, B.: Object-Oriented Software Construction. Prentice Hall, Englewood Cliffs (1997)
Barendregt, H.: The Lambda Calculus - Its Syntax and Semantics, 2nd edn. North-Holland, Amsterdam (1984)
Dijkstra, E.: On the role of scientific thought. In: Dijkstra, E.W. (ed.) Selected writings on Computing: A Personal Perspective. Texts and Monographs in Computer Science, pp. 60–66. Springer-Verlag, New York (1982)
Scott, M.: Programming Language Pragmatics, 3rd edn. Morgan Kaufmann, San Francisco (2009)
Kiczales, G., Lamping., J., Mendhekar, A., Maeda, C., Lopes, C., Loingtier, J. M., Irwin, J.: Aspect-oriented programming. In: Proceedings of the 11th European Conference on Object-Oriented Programming ECOOP’97. LNCS 1241, pp. 220–242 (1997)
Hinchey, M., Bowen, J., Vassev, E.: Formal Methods. In: Laplante, P.A. (ed.) Encyclopedia of Software Engineering, pp. 308–320. Taylor & Francis, New York (2010)
Haskell Programming Language. http://www.haskell.org. Accessed 4 July 2014
Hopcroft, J., Ullman, J.: Introduction to Automata Theory, Languages, and Computation. Addison-Wesley, Boston (1979)
Hutton, G.: Higher-order functions for parsing. J. Funct. Program. 2, 323–343 (1992)
Wadler, P.: How to replace failure by a list of successes a method for exception handling, backtracking, and pattern matching in lazy functional languages. In: Jouannaud, J.-P. (ed.) FPCA 1985. LNCS, vol. 201, pp. 113–128. Springer, Heidelberg (1985). doi:10.1007/3-540-15975-4_33
Backhouse, R., Jansson, P., Jeuring, J., Meertens, L.: Generic programming - an introduction. In: Swierstra, S., Henriques, P., Oliveira, J. (eds.) Advanced Functional Programming. LNCS, vol. 1608, pp. 28–115 (1999)
Meijer, E., Fokkinga, M., Paterson, R.: Functional programming with bananas, lenses, envelopes and barbed wire. In: Hughes, J. (ed.) FPCA 1991. LNCS, vol. 523, pp. 124–144. Springer, Heidelberg (1991). doi:10.1007/3540543961_7
Hutton, G.: A tutorial on the universality and expressiveness of fold. J. Funct. Program. 9, 355–372 (1999)
Bailes, P., Brough, L.: Making sense of recursion patterns. In: Proceedings of 1st FormSERA: Rigorous and Agile Approaches, pp. 16–22. IEEE (2012)
Uustalu, T., Vene, V., Pardo, A.: Recursion schemes from comonads. Nordic J. Comput. 8(3), 366–390 (2001)
Reynolds, J.C.: Three approaches to type structure. In: Ehrig, H., Floyd, C., Nivat, M., Thatcher, J. (eds.) CAAP 1985. LNCS, vol. 185, pp. 97–138. Springer, Heidelberg (1985). doi:10.1007/3-540-15198-2_7
Bailes, P., Kemp, C.: Fusing folds and data structures into zoetic data. In: Proceedings of 23rd IASTED International Multi-Conference on Applied Informatics (AI 2005), pp. 299–306 (2005)
Bailes, P., Kemp, C.: Zoetic data and their generators. In: Proceedings of 11th International Conference on Evaluation of Novel Software Approaches to Software Engineering (ENASE 2016), pp. 260–271 (2016)
Bailes, P., Brough, L., Kemp, C.: From computer science to software engineering – a programming-level perspective. In: Fujita, H., et al. (eds.) New Trends in Software Methodologies. Tools and Techniques. IOS Press, Amsterdam (2014)
Backus, J.: Can programming be liberated from the von Neumann style?: A functional style and its algebra of programs. Commun. ACM 21(8), 613–641 (1978)
Dahl, O.-J., Dijkstra, E.W., Hoare, C.A.R.: Structured Programming. Academic Press, Cambridge (1972)
Turner, D.A.: Total functional programming. J. Univers. Comput. Sci. 10(7), 751–768 (2004)
Coq proof assistant. https://coq.inria.fr/. Accessed 22 Feb 2016
Gibbons, J., Hutton, G., Altenkirch, T.: When is a function a fold or an unfold? Electron. Notes Theor. Comput. Sci. 44(1), 2001 (2001)
Milner, R.: A theory of type polymorphism in programming. J. Comput. Syst. Sci. 17, 348–375 (1977)
Haskell platform. http://www.haskell.org/platform/. Accessed 4 July 2014
Vytiniotis, D., Weirich, S., Jones, S.L.P.: Boxy types: inference for higher-rank types and impredicativity. In: Proceedings of ICFP, pp. 251–262 (2006)
Bailes, P.: Recursion patterns and their impact on programming language design. In: Proceedings of IASTED International Conference Advances in Computer Science (ACS 2013), pp. 450–459 (2013)
Swierstra, S.D., Azero Alcocer, P.R., Saraiva, J.: Designing and implementing combinator languages. In: Swierstra, S.D., Oliveira, J.N., Henriques, P.R. (eds.) AFP 1998. LNCS, vol. 1608, pp. 150–206. Springer, Heidelberg (1999). doi:10.1007/10704973_4
Jackson, A.: Analog Computation. McGraw-Hill, New York (1960)
Bailes, P., Brough, L., Kemp, C.: Higher-order catamorphisms as bases for program structuring and design recovery. In: Proceedings of IASTED International Conference Software Engineering (SE 2013), pp. 775–782 (2013)
Acknowledgements
We gratefully acknowledge our various colleagues’ contributions over the years to our ongoing work reflected here, especially those of Leighton Brough. Also, Tim Westcott, William Woodward and Khoa Tran made useful contributions to the implementation of the Zoe language prototypes.
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2016 Springer International Publishing AG
About this paper
Cite this paper
Bailes, P., Kemp, C. (2016). Software Engineering Foundations of Zoetic Data and Totally Functional Programming. In: Maciaszek, L., Filipe, J. (eds) Evaluation of Novel Approaches to Software Engineering. ENASE 2016. Communications in Computer and Information Science, vol 703. Springer, Cham. https://doi.org/10.1007/978-3-319-56390-9_7
Download citation
DOI: https://doi.org/10.1007/978-3-319-56390-9_7
Published:
Publisher Name: Springer, Cham
Print ISBN: 978-3-319-56389-3
Online ISBN: 978-3-319-56390-9
eBook Packages: Computer ScienceComputer Science (R0)