Skip to main content

Software Engineering Foundations of Zoetic Data and Totally Functional Programming

  • Conference paper
  • First Online:
Evaluation of Novel Approaches to Software Engineering (ENASE 2016)

Part of the book series: Communications in Computer and Information Science ((CCIS,volume 703))

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.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Subscribe and save

Springer+ Basic
$34.99 /Month
  • Get 10 units per month
  • Download Article/Chapter or eBook
  • 1 Unit = 1 Article or 1 Chapter
  • Cancel anytime
Subscribe now

Buy Now

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Similar content being viewed by others

References

  1. Hughes, J.: Why functional programming matters. Comput. J. 32(2), 98–107 (1989)

    Article  MathSciNet  Google Scholar 

  2. Bird, R., Wadler, P.: Introduction to Functional Programming. Prentice-Hall International, Upper Saddle River (1988)

    Google Scholar 

  3. Abelson, H., Sussman, G.J., Sussman, J.: Structure and Interpretation of Computer Programs, 2nd edn. MIT Press, Cambridge (1996)

    MATH  Google Scholar 

  4. Collins English Dictionary. http://www.collinsdictionary.com. Accessed 4 July 2014

  5. Sommerville, I.: Software Engineering, 8th edn. Addison Wesley, Boston (2007)

    MATH  Google Scholar 

  6. Sommerville, I.: Software Engineering, 10th edn. Pearson, Essex (2015)

    MATH  Google Scholar 

  7. Meyer, B.: Object-Oriented Software Construction. Prentice Hall, Englewood Cliffs (1997)

    MATH  Google Scholar 

  8. Barendregt, H.: The Lambda Calculus - Its Syntax and Semantics, 2nd edn. North-Holland, Amsterdam (1984)

    MATH  Google Scholar 

  9. 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)

    Chapter  Google Scholar 

  10. Scott, M.: Programming Language Pragmatics, 3rd edn. Morgan Kaufmann, San Francisco (2009)

    MATH  Google Scholar 

  11. 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)

    Google Scholar 

  12. 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)

    Google Scholar 

  13. Haskell Programming Language. http://www.haskell.org. Accessed 4 July 2014

  14. Hopcroft, J., Ullman, J.: Introduction to Automata Theory, Languages, and Computation. Addison-Wesley, Boston (1979)

    MATH  Google Scholar 

  15. Hutton, G.: Higher-order functions for parsing. J. Funct. Program. 2, 323–343 (1992)

    Article  MathSciNet  MATH  Google Scholar 

  16. 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

    Chapter  Google Scholar 

  17. 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)

    Google Scholar 

  18. 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

    Chapter  Google Scholar 

  19. Hutton, G.: A tutorial on the universality and expressiveness of fold. J. Funct. Program. 9, 355–372 (1999)

    Article  MATH  Google Scholar 

  20. Bailes, P., Brough, L.: Making sense of recursion patterns. In: Proceedings of 1st FormSERA: Rigorous and Agile Approaches, pp. 16–22. IEEE (2012)

    Google Scholar 

  21. Uustalu, T., Vene, V., Pardo, A.: Recursion schemes from comonads. Nordic J. Comput. 8(3), 366–390 (2001)

    MathSciNet  MATH  Google Scholar 

  22. 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

    Chapter  Google Scholar 

  23. 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)

    Google Scholar 

  24. 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)

    Google Scholar 

  25. 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)

    Google Scholar 

  26. 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)

    Article  MathSciNet  MATH  Google Scholar 

  27. Dahl, O.-J., Dijkstra, E.W., Hoare, C.A.R.: Structured Programming. Academic Press, Cambridge (1972)

    MATH  Google Scholar 

  28. Turner, D.A.: Total functional programming. J. Univers. Comput. Sci. 10(7), 751–768 (2004)

    MathSciNet  Google Scholar 

  29. Coq proof assistant. https://coq.inria.fr/. Accessed 22 Feb 2016

  30. Gibbons, J., Hutton, G., Altenkirch, T.: When is a function a fold or an unfold? Electron. Notes Theor. Comput. Sci. 44(1), 2001 (2001)

    Article  MATH  Google Scholar 

  31. Milner, R.: A theory of type polymorphism in programming. J. Comput. Syst. Sci. 17, 348–375 (1977)

    Article  MathSciNet  MATH  Google Scholar 

  32. Haskell platform. http://www.haskell.org/platform/. Accessed 4 July 2014

  33. 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)

    Google Scholar 

  34. 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)

    Google Scholar 

  35. 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

    Chapter  Google Scholar 

  36. Jackson, A.: Analog Computation. McGraw-Hill, New York (1960)

    MATH  Google Scholar 

  37. 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)

    Google Scholar 

Download references

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

Authors

Corresponding author

Correspondence to Paul Bailes .

Editor information

Editors and Affiliations

Rights and permissions

Reprints 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)

Publish with us

Policies and ethics