poelie
Perl regular expressions are pretty powerful. I wrote a small perl program (just for fun after reading the post), which can parse S-Expressions. It wrote it quick, but it shows it is possible:
I know it has bugs.
Two years ago I found Haskell. It was difficult to learn, until I realized in Haskell you are just doing mathematics. In functional languages a function is a mathematical function. You can actually reason about code and even prove your code. This is extremely cool (from my point of view).
I purchased some books on lambda calculus, logic, category theory and did the SICP thing. Now functional programming feels more natural to me. I used it as day to day tool.
The trick with Haskell is to model the data you are going to use. Haskell has a good mathematical ground and if you model it right, you can leverage a lot of mathematical tools.
We use it on a web project in combination with PostgreSQL. These two match pretty nicely. Both have strong type systems. We wrote an JsonRPC server in haskell, which acts as a secure proxy between the database and the client.
We also use it for system scripting. We wrote a special embedded DSL based on arrows for critical tasks. And we use it for the analysis of data. This is mostly a pipeline ala: Parsing -> Interpreting -> Analyzing -> Storing, where every phase has his own data type. It is great for writing parsers.
It has the speed of a compiled language and the ease of a scripting language. It doesn't match c or c++ of course in speed. But you can get very close and in almost all cases close enough.
The main negative aspect is that it is difficult to reason about your code in terms of performance. And laziness can also do wonderful unexpected things. And bugs in the compiler.
Only paradigm shifts are really difficult. From imperative to functional. From functional to reactive etc. But these are also the more worthwhile experiences, because they broaden your possibilities as programmer.