Skip to main content

Introducing CLOVER: An object-oriented functional language

  • Conference paper
  • First Online:

Part of the book series: Lecture Notes in Computer Science ((LNCS,volume 1268))

Abstract

The search for a language which combines both functional and object-oriented features has a long and distinguished history [Can82, Car84, BK86, BD88, BGW91, MHH91, AP93, CL91, MMH91, Sar93, CL96]. The aim is to integrate the formal methods benefits of functional programming with the software engineering benefits of both paradigms. However, to date we know of no language which can claim to be both purely functional and purely object-oriented (and retains complete type safety). We present CLOVER, a new language which is 100% functional and 99% object-oriented. It is also completely type safe. We explain the design issues and how CLOVER achieves its aim. We also explain the “missing” 1%, discuss its relevance, and illustrate how its loss can be extenuated through the use of a new visual programming notation.

During the course of this work, Lee Braine was supported by an EPSRC research studentship and a CASE award from Andersen Consulting.

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

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. Aiken, A., Fahndrich, M.: Dynamic Typing and Subtype Inference. Technical Report, Computer Science Division, University of California, Berkeley, (1995)

    Google Scholar 

  2. Agha, G., Hewitt, C.: Actors: A Conceptual Foundation for Concurrent Object-Oriented Programming. In Shriver & Wegner (Eds), Research Directions in Object-Oriented Programming, MIT Press, (1987) 47–74

    Google Scholar 

  3. Aiken, A., Murphy, B.: Static Type Inference in a Dynamically Typed Language. Technical Report, IBM Almaden Research Centre, (1990)

    Google Scholar 

  4. Ait-Kaci, H., Podelski, A.: Towards a Meaning of LIFE. Journal of Logic Programming, 16(3-4), (1993) 195–234

    Google Scholar 

  5. Aiken, A., Wimmer, E.: Type Inclusion Constraints and Type Inference. Technical Report, IBM Almaden Research Center, (1993)

    Google Scholar 

  6. Aiken, A., Wimmers, E.: Soft Typing with Conditional Types. In Proc. 21st POPL, (1994)

    Google Scholar 

  7. Bobrow, D., DeMichiel, L., et al.: Common Lisp Object System Specification. SIGPLAN Notices v23, (1988)

    Google Scholar 

  8. Berger, E.: FP + OOP=Haskell. Technical Report, Department of Computer Science, University of Texas at Austin, (1992)

    Google Scholar 

  9. Bobrow, D., Gabriel, R., White, J.: CLOS: Integrating Object-Oriented and Functional Programming. CACM 34(9), (1991) 28–38

    Google Scholar 

  10. Bobrow, D., Kahn, K., et al.: CommonLOOPS: Merging Lisp and Object-Oriented Programming. In Proc. ACM OOPSLA, (1986)

    Google Scholar 

  11. Bourdoncle, F., Merz, S.: Primitive subtyping ∧ implicit polymorphism − object-orientation. In Proc. 3rd FOOL, (1996)

    Google Scholar 

  12. Booch, G.: Object-Oriented Analysis and Design with Applications, Second Edition. Benjamin-Cummings, (1994)

    Google Scholar 

  13. Budd, T.: Multiparadigm Programming in Leda. Addison-Wesley, (1995)

    Google Scholar 

  14. Cannon, H.: Flavors: A non-hierarchical approach to object-oriented programming. Symbolics Inc., (1982)

    Google Scholar 

  15. Cardelli, L.: A Semantics of Multiple Inheritance. In Proc. Intl. Symposium on Semantics of Data Types, (1984) 51–67

    Google Scholar 

  16. Castagna, G.: Covariance and Contravariance: Conflict without a Cause. ACM TOPLAS, 17(3), (1995) 431–447

    Google Scholar 

  17. Canning, P., Cook, W., et al.: F-Bounded Polymorphism for Object-Oriented Programming. In Proc. FPCLA, (1989) 273–280

    Google Scholar 

  18. Clack, C., Clayman, S., Parrott, D.: Lexical Profiling — Theory and Practice. Journal of Functional Programming, 5(2), (1995) 225–277

    Google Scholar 

  19. Cardelli, L., Longo, G.: A Semantic Basis for Quest. Journal of Functional Programming, 1(4), (1991) 417–458

    Google Scholar 

  20. Caseau, Y., Laburthe, F.: Introduction to the CLAIRE Programming Language. Technical Report, LIENS, (1996)

    Google Scholar 

  21. Cardelli, L., Wegner, P.: On understanding types, data abstraction, and polymorphism. Computing Surveys, 17(4), (1985) 471–522

    Google Scholar 

  22. Damas, L., Milner, R.: Principal type schemes for functional programs. In Proc. 9th POPL, (1982) 207–212

    Google Scholar 

  23. Dami, L., Vitek, J.: Introduction to HOP, a Functional and Object-Oriented Language. Submitted for publication, (1996)

    Google Scholar 

  24. Drossopoulou, S., Yang, D.: ST&T: Smalltalk with Types. Technical Report DOC 94/11, Imperial College, (1994)

    Google Scholar 

  25. Drossopoulou, S., Yang, D.: Permissive Types. Proc. 3rd FOOL, (1996)

    Google Scholar 

  26. Gelernter, D., Jagannathan, S., London, T.: Environments as First Class Objects. In Proc. 14th POPL, (1987) 98–100

    Google Scholar 

  27. Goldberg, A., Robson, D.: Smalltalk-80: The Language and its Implementation. Addison-Wesley, (1983)

    Google Scholar 

  28. Goguen, J., Winkler, T., Meseguer, J., Futatsugi, K., Jouannaud, J.: Introducing OBJ. Tutorial and Manual, Computing Laboratory, Oxford University, (1993)

    Google Scholar 

  29. Hudak, P., Peyton Jones, S., Wadler, P. (Eds): Report on the Programming Language Haskell. Department of Computing Science, University of Glasgow, (1991)

    Google Scholar 

  30. Leroy, X.: Le systeme Caml Special Light: modules et compilation efficace en Caml. Research Report 2721, Institut National de Recherche en Informatique et Automatique (INRIA), (1995)

    Google Scholar 

  31. Meyer, B.: Eiffel: The Language. Prentice Hall, (1991)

    Google Scholar 

  32. Mugridge, W., Hosking, J., Hammer, J.: Multi-methods in a Statically-Typed Programming Language. In Proc. ECOOP'91, (1991)

    Google Scholar 

  33. Mitchell, J., Meldal, S., Hadhav, N.: An Extension of Standard ML Modules with Subtyping and Inheritance. In Proc. 18th POPL, (1991)

    Google Scholar 

  34. Milner, R., Tofte, M., Harper, R.: The Definition of Standard ML. MIT Press, (1990)

    Google Scholar 

  35. Oortmerssen, W.: The Bla Language: Extending Functional Programming with First Class Environments. Masters thesis, Department of Computational Linguistics, University of Amsterdam, (1996)

    Google Scholar 

  36. Poswig, J., Moraga, C.: Incremental type systems and implicit parametric overloading in visual languages. IEEE Symposium on Visual Languages, (1993) 126–133

    Google Scholar 

  37. Reppy, J., Riecke, J.: Simple objects for Standard ML. In Proc. PLDI'97, (1997) 171–180

    Google Scholar 

  38. Remy, D., Vouillon, J.: Objective ML: A simple object-oriented extension of ML. In Proc. 3rd FOOL, (1996)

    Google Scholar 

  39. Sargeant, J.: Uniting Functional and Object-Oriented Programming. In Proc. ISOTAS'93, LNCS 742, Springer-Verlag, (1993) 1–26

    Google Scholar 

  40. Sargeant, J., Kirkham, C., Anderson, S.: The Uflow Computational Model and Intermediate Format. Technical Report UMCS-94-5-1, Department of Computer Science, University of Manchester, (1994)

    Google Scholar 

  41. Socorro, A.: Design, implementation and evaluation of a declarative object-oriented programming language. DPhil thesis, Computing Laboratory, University of Oxford, (1993)

    Google Scholar 

  42. Steele Jr, G.: Common LISP: The Language. Digital Press, (1984)

    Google Scholar 

  43. Turner, D.: Functional Programs as Executable Specifications. In Hoare & Shepherdson (Eds), Mathematical Logic and Programming Languages, Prentice Hall, (1985)

    Google Scholar 

  44. Wadler, P., Blott, S.: How to make ad-hoc polymorphism less ad-hoc. In Proc. 16th POPL, (1989) 60–76

    Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Editor information

Werner Kluge

Rights and permissions

Reprints and permissions

Copyright information

© 1997 Springer-Verlag Berlin Heidelberg

About this paper

Cite this paper

Braine, L., Clack, C. (1997). Introducing CLOVER: An object-oriented functional language. In: Kluge, W. (eds) Implementation of Functional Languages. IFL 1996. Lecture Notes in Computer Science, vol 1268. Springer, Berlin, Heidelberg. https://doi.org/10.1007/3-540-63237-9_16

Download citation

  • DOI: https://doi.org/10.1007/3-540-63237-9_16

  • Published:

  • Publisher Name: Springer, Berlin, Heidelberg

  • Print ISBN: 978-3-540-63237-5

  • Online ISBN: 978-3-540-69239-3

  • eBook Packages: Springer Book Archive

Publish with us

Policies and ethics