Apparently Philip Wadler came up with this notion, so your already-mentioned Haskell should suffice ;)
> idris for dependent types
Are we still on "Essentially, which are these few common paradigm languages that teach you more than 90% of what's out there?" or are we by now in the territory of "which languages to cover every single remotely-computation-related notion anyone ever conjured up and managed to somewhat implement"? ;D
* Procedural: c / pascal / basic / fortran
* OO: c++ / java / c#
* Dynamic: python / ruby / javascript
* Funcional: lisp / scheme / clojure / haskell
* Logic: prolog
* Query: SQL
* Assembly
Learning something of each category should prepare you for almost everything!
In a proper object-oriented language, everything is an object, including these. That allows you to do some really interesting things which are at the heart of the OO mindset. e.g. Smalltalk avoids having to use conditionals almost completely via dynamic dispatch:
b ifTrue: [ 'b is true!' print ]
b is a Boolean; ifTrue:block is an abstract method called on Boolean. But the values true and false are actually instances of subclasses of Boolean; True's implementation of ifTrue evaluates the block, and False's doesn't, and that's how you get different behaviour depending on whether b is true or false. The core language neither knows nor cares that booleans are special.(Actually, the bytecode does care, and has special accelerated opcodes to make operations of booleans fast for performance reasons, but that's just an implementation detail.)
Any idea what sort of applications the Mercury language is used commercially for? (Only) one I know of is Prince XML (from the Wikipedia article about either one of them). Not saying it's not used for more, just interested to know.
http://www.missioncriticalit.com/technology.html
You could also use it anywhere Prolog is used. So, you could look up applications or commercial users of Prolog. Here's one in finance that would probably benefit from Mercury:
https://dtai.cs.kuleuven.be/CHR/files/Elston_SecuritEase.pdf
This way by covering the extreme ends of the spectrum from (A) gratifyingly roll-up-your-sleeves-and-get-your-hands-dirty petal-to-the-medal (heh) systems programming to (Z)abstractions-all-the-way-up-and-down-and-sideways algebraic-typed purely-functional glory.
With current-day concurrency approaches, easy-networked-ness etc thrown in natively in any of the above.
Once proficient in these "spectrum extremes", anything in between should be relatively easier to get up to speed with
Essentially, which are these few common paradigm languages that teach you more than 90% of what's out there? My guess would be to include something like C and LISP, but is that enough?