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