As for pattern-matching, the absolute coolest demonstration of this is quicksort in 2 or 3 lines of Haskell
Just for the fun of it, and for comparision, here is what (I think) the equivalent perl would be (for numeric sorts, I don't know if Haskell has a separate character comparision operator like Perl):
sub qs {
return unless @_;
my $x = shift;
return qs(grep($_ < $x, @_)), $x, qs(grep($_ >= $x, @_));
}
It can be done without the
$x temp variable and the
shift (saving one line), but then it's less readable IMO.