Introducing CLOVER: An object-oriented functional language

  • Lee Braine
  • Chris Clack
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 1268)


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.


Distinguished Object Class Hierarchy Type Inference Functional Language Dynamic Typing 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. [AF95]
    Aiken, A., Fahndrich, M.: Dynamic Typing and Subtype Inference. Technical Report, Computer Science Division, University of California, Berkeley, (1995)Google Scholar
  2. [AH87]
    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–74Google Scholar
  3. [AM90]
    Aiken, A., Murphy, B.: Static Type Inference in a Dynamically Typed Language. Technical Report, IBM Almaden Research Centre, (1990)Google Scholar
  4. [AP93]
    Ait-Kaci, H., Podelski, A.: Towards a Meaning of LIFE. Journal of Logic Programming, 16(3-4), (1993) 195–234Google Scholar
  5. [AW93]
    Aiken, A., Wimmer, E.: Type Inclusion Constraints and Type Inference. Technical Report, IBM Almaden Research Center, (1993)Google Scholar
  6. [AW94]
    Aiken, A., Wimmers, E.: Soft Typing with Conditional Types. In Proc. 21st POPL, (1994)Google Scholar
  7. [BD88]
    Bobrow, D., DeMichiel, L., et al.: Common Lisp Object System Specification. SIGPLAN Notices v23, (1988)Google Scholar
  8. [Ber92]
    Berger, E.: FP + OOP=Haskell. Technical Report, Department of Computer Science, University of Texas at Austin, (1992)Google Scholar
  9. [BGW91]
    Bobrow, D., Gabriel, R., White, J.: CLOS: Integrating Object-Oriented and Functional Programming. CACM 34(9), (1991) 28–38Google Scholar
  10. [BK86]
    Bobrow, D., Kahn, K., et al.: CommonLOOPS: Merging Lisp and Object-Oriented Programming. In Proc. ACM OOPSLA, (1986)Google Scholar
  11. [BM96]
    Bourdoncle, F., Merz, S.: Primitive subtyping ∧ implicit polymorphism − object-orientation. In Proc. 3rd FOOL, (1996)Google Scholar
  12. [Boo94]
    Booch, G.: Object-Oriented Analysis and Design with Applications, Second Edition. Benjamin-Cummings, (1994)Google Scholar
  13. [Bud95]
    Budd, T.: Multiparadigm Programming in Leda. Addison-Wesley, (1995)Google Scholar
  14. [Can82]
    Cannon, H.: Flavors: A non-hierarchical approach to object-oriented programming. Symbolics Inc., (1982)Google Scholar
  15. [Car84]
    Cardelli, L.: A Semantics of Multiple Inheritance. In Proc. Intl. Symposium on Semantics of Data Types, (1984) 51–67Google Scholar
  16. [Cas95]
    Castagna, G.: Covariance and Contravariance: Conflict without a Cause. ACM TOPLAS, 17(3), (1995) 431–447Google Scholar
  17. [CC89]
    Canning, P., Cook, W., et al.: F-Bounded Polymorphism for Object-Oriented Programming. In Proc. FPCLA, (1989) 273–280Google Scholar
  18. [CCP95]
    Clack, C., Clayman, S., Parrott, D.: Lexical Profiling — Theory and Practice. Journal of Functional Programming, 5(2), (1995) 225–277Google Scholar
  19. [CL91]
    Cardelli, L., Longo, G.: A Semantic Basis for Quest. Journal of Functional Programming, 1(4), (1991) 417–458Google Scholar
  20. [CL96]
    Caseau, Y., Laburthe, F.: Introduction to the CLAIRE Programming Language. Technical Report, LIENS, (1996)Google Scholar
  21. [CW85]
    Cardelli, L., Wegner, P.: On understanding types, data abstraction, and polymorphism. Computing Surveys, 17(4), (1985) 471–522Google Scholar
  22. [DM82]
    Damas, L., Milner, R.: Principal type schemes for functional programs. In Proc. 9th POPL, (1982) 207–212Google Scholar
  23. [DV96]
    Dami, L., Vitek, J.: Introduction to HOP, a Functional and Object-Oriented Language. Submitted for publication, (1996)Google Scholar
  24. [DY94]
    Drossopoulou, S., Yang, D.: ST&T: Smalltalk with Types. Technical Report DOC 94/11, Imperial College, (1994)Google Scholar
  25. [DY96]
    Drossopoulou, S., Yang, D.: Permissive Types. Proc. 3rd FOOL, (1996)Google Scholar
  26. [GJL87]
    Gelernter, D., Jagannathan, S., London, T.: Environments as First Class Objects. In Proc. 14th POPL, (1987) 98–100Google Scholar
  27. [GR83]
    Goldberg, A., Robson, D.: Smalltalk-80: The Language and its Implementation. Addison-Wesley, (1983)Google Scholar
  28. [GWM93]
    Goguen, J., Winkler, T., Meseguer, J., Futatsugi, K., Jouannaud, J.: Introducing OBJ. Tutorial and Manual, Computing Laboratory, Oxford University, (1993)Google Scholar
  29. [HPW91]
    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. [Ler95]
    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. [Mey91]
    Meyer, B.: Eiffel: The Language. Prentice Hall, (1991)Google Scholar
  32. [MHH91]
    Mugridge, W., Hosking, J., Hammer, J.: Multi-methods in a Statically-Typed Programming Language. In Proc. ECOOP'91, (1991)Google Scholar
  33. [MMH91]
    Mitchell, J., Meldal, S., Hadhav, N.: An Extension of Standard ML Modules with Subtyping and Inheritance. In Proc. 18th POPL, (1991)Google Scholar
  34. [MTH90]
    Milner, R., Tofte, M., Harper, R.: The Definition of Standard ML. MIT Press, (1990)Google Scholar
  35. [Oor96]
    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. [PM93]
    Poswig, J., Moraga, C.: Incremental type systems and implicit parametric overloading in visual languages. IEEE Symposium on Visual Languages, (1993) 126–133Google Scholar
  37. [RR96]
    Reppy, J., Riecke, J.: Simple objects for Standard ML. In Proc. PLDI'97, (1997) 171–180Google Scholar
  38. [RV96]
    Remy, D., Vouillon, J.: Objective ML: A simple object-oriented extension of ML. In Proc. 3rd FOOL, (1996)Google Scholar
  39. [Sar93]
    Sargeant, J.: Uniting Functional and Object-Oriented Programming. In Proc. ISOTAS'93, LNCS 742, Springer-Verlag, (1993) 1–26Google Scholar
  40. [SKA94]
    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. [Soc93]
    Socorro, A.: Design, implementation and evaluation of a declarative object-oriented programming language. DPhil thesis, Computing Laboratory, University of Oxford, (1993)Google Scholar
  42. [Ste84]
    Steele Jr, G.: Common LISP: The Language. Digital Press, (1984)Google Scholar
  43. [Tur85]
    Turner, D.: Functional Programs as Executable Specifications. In Hoare & Shepherdson (Eds), Mathematical Logic and Programming Languages, Prentice Hall, (1985)Google Scholar
  44. [WB89]
    Wadler, P., Blott, S.: How to make ad-hoc polymorphism less ad-hoc. In Proc. 16th POPL, (1989) 60–76Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 1997

Authors and Affiliations

  • Lee Braine
    • 1
  • Chris Clack
    • 1
  1. 1.Department of Computer ScienceUniversity College LondonLondonUK

Personalised recommendations