I purchased Visual Studio 2010 (Professional) a few months ago with the idea it was the most productive development environments around. Yet now I need to revisit this belief.
The reason for this change is my dive into programming with deep functional abstraction: when programming with combinatorial operators and monads, the code no longer has a strong tie with the resulting executable. The debugger becomes near useless: the call stack is anonymous because it refers mostly to bind like functions that shed no light on what is happening, the breakpoints are often not accepted, and when they are they do not help you much because they are not a relevant parts of your code. I find myself thrown back into stone age needing to insert trace operations to understand what my code does. The other day I wrote if x1 <> x2 ... It took me nine hours to find the mistake (which I then rewrote with a switch statement because that is the right way not to make that type of mistake).
Therefore I am slowly getting the feeling that ocaml on linux is as "easy" to use as F# in Visual Studio when the code has lots of functional abstractions. And I am almost ready to say the hell with with the ML family and switch to Haskell because the formal framework is "smoother".