AldorFrom its home-page:
[..] a type-complete, strongly-typed, imperative programming language with a two-level object model of categories and domains (similar to the concept of interfaces and classes in Java). Types and functions are first class entities allowing them to be constructed and manipulated within Aldor programs just like any other value. Pervasive use of dependent types allows static checking of dynamic objects and provides object-oriented features such as parametric polymorphism.
What does this mean for a normal user? Aldor solves many difficulties encountered with certain widely-used object-oriented programming languages. It allows programs to use a natural style, combining the more attractive and powerful properties of functional, object-oriented and aspect-oriented styles. [..]