Well I've got nothing against functional languages. They do have advantages and are great for the problems you describe. Any problem that uses heavy mathematical functions and relies heavily on recursion is natively suited to a functional programming language. And you're correct when saying that any problem that can be solved by an object-orientated language can be solved by a functional language, and vice-versa. However that doesn't always mean it will be easy.
The advantage of an object-orientated language is obviously the ability to break any problem down to the smallest of components that each work individually to perform a specific task. In functional programming, you have functions that depend on other functions that depend on other functions. Change one and you could break ten others. It is possible to build programs in a functional language with OOP principles in mind, but is it more difficult to do this in a functional language... that's debatable.
I looked at your criticisms of PHP. Now PHP is not a language I have a strong background in. In fact, I've only ever used it on one project and only in a very small way, so I do not really have a good understanding of the language. However, you said most of these criticisms apply to C#, so I will try to address them.
QUOTE
1. The single biggest reason is that the language is poorly designed from the get go. It has all the marks of being a toy language that has been extended in a kludge-like fashion over time, but without any serious thought going into long term design.
I do not believe this holds true for C#. Now admittedly, C# is only in its second iteration so it's difficult to see how the language will evolve over time. However, I find the language to be consistent. I'm not sure what you specifically meant in regards to PHP as again, I have a poor understanding of that language.
QUOTE
2. It has no formal semantic. This isn't always necessary for a powerful language (c and c++ didn't have one either), but it is usually necessary for a powerful, well-designed language that is easy to understand and to extend in a clean fashion (witness the ugliness of C++ mandated by adhering to previous C syntax, when C wasn't really designed for the type of things C++ does).
Well I'll agree that C++ is ugly is this situation. C was definitely not designed for the types of things C++ does. As such I see C# as what C++ should have been, an object-orientated language syntactically similar to C.
QUOTE
3. The syntax is overly verbose and often superfluous. Part of this comes from copying some of C's inferior syntax, and part of it comes from just adding more unnecessary stuff on top of that. Stuff like prefixing variables with $ is totally unnecessary, and is just one of many examples. In a language like Perl, where symbolic prefixes actually mean something, it's one thing, but in PHP it just reflects poor design once again.
Again, I don't believe C# suffers from this problem. In fact, many things that were changed in C# were designed to reduce the amount of superfluous syntax.
QUOTE
4. Related to 3, PHP is pretty horribly inexpressive. There's very little in the way of syntactic sugar, and there's little support for functional programming. You have a few basic things like map, filter, and reduce defined for arrays, and a really ugly and hackish anonymous function facility (string based, rather than code based!), but they're setup in such a way that they wouldn't be very useful for anything really advanced. Beyond that, it doesn't have closures, currying, pattern matching, array/list comprehension, laziness, etc. This isn't even to mention other much more advanced features that most modern advanced languages might feature such as higher-order parametric polymorphism with quantified types, type classes, monads, arrows, uniqueness typing, implicit parameters, continuations, concurrency, lazy streams, constraints, etc., etc., etc.
The lack of functional programming features is true for C# as well, but this is not its purpose. If you want functional programming, use a functional language.
QUOTE
5. Not scalable. PHP only recently even got OOP AFAIU. And on top of that, it's support for classes is very weak (not to mention quite slow) compared to something actually useful like in C++. OOP is by far not the only way (and possibly not the best even) to handle scalability, but what other non-OOP languages use to deal with this problem, PHP does not have either.
Clearly not applicable to C# as it's an OOP language with strong typing.
QUOTE
6. No metaprogramming. Nothing like C++ templates, LISP or Scheme Macros, or templates in Haskell, etc. This is a real shame because for the kinds of tasks PHP is used for, metaprogramming can tremendously cut down on boilerplate code, as well as improving efficiency, reducing errors, and improving maintainability.
C# 2.0 has generics that are similar to C++ Templates, but support a few additional features.
QUOTE
7. Poorly designed integration with webpage content. PHP's cut and paste style integration with web pages might have been a good idea years ago when non-standard HTML code abounded and people weren't concerned so much with structural validity of code, or the ease of maintenance of such code and integration of it with other tools, but that is no longer true today. Something like Zope's Page Templates, which allow integration of python code into completely valid XML, is a much more elegant solution. Not only does it make page maintenance way easy, and allows for separation of concerns, but it also allows people to use the same tools for dynamic pages that they use for static pages. Yes, there is a sort of Page Template implementation in the 3rd party PHPTAL library, which basically copies the syntax and semantics of the Zope version, but since PHP was not built with this style of implementation in mind, it's a lot more limited than what you can get with Zope and Python.
Again not applicable as C# is not designed as a web language.
QUOTE
8. Relatively weak development tools and environment. Due to the nature of the language, and the lack of a coherent runtime environment like you get with many alternatives to PHP, PHP just isn't very strong on this front. A lot of this has to do with the fact that PHP has no real non-webpage centric basis. Maybe there's something really good out there that I don't know about, but I've certainly never seen anything free or fairly cheap that is nearly as powerful as the tools I use for any other of the dozen or so languages I program with.
After you get used to the visual complexity Visual Studio, you realise it is a very powerful IDE offering a number of very useful features. Furthermore, the express editions of VS.2005 are now free if you get them within the next year (by which time the next version of VS will be in full development). The license is not restricted to that year period either, so you can use them as long as you want.
QUOTE
9. Slow. PHP just isn't very fast compared to most real languages. I don't think there's much else to say there.
I point you to
this (rather limited) perfomance comparison. Now again, I'll admit this test was fairly limited (ok very), but I think it accurately depicts C#'s average performance. There is another (limited) performance comparison
here. The consensus seems to be that C# is slower than C++, but faster than Java. So it's relatively quick compared to it's main competition (Java).
OK, it seems ErikS got in before me. Anyway, like Erik I'm relatively new to functional languages, so don't destroy my credibility too badly

.
As a final note, C# and Haskell are to completely different languages. They target different markets with different problem solving needs. One is designed around the rapid and easy building of applications. The other is designed around the speedy evaluation of functions and recursion. There are problems best solved by OOP languages, and problems best solved by functional languages, but in terms of OOP languages, I think C# has to be one of the better ones.