F# is general purpose and multi-paradigm, it even has OO classes and imperative for and while loops. I for one got into .NET because of F# and to me .NET is just like any other language runtime.
OOI why did you choose F# rather than Haskell, OCaml or Scala? I mean sure, it's a perfectly good language for the more general case (leaving aside the poor tool support outside Windows and limited deployment options - but conversely if you're already committed to Windows the tooling is very good), but there are plenty of comparable options there; the unique selling point is the .net integration.
* .NET runs everywhere now without problems, the JVM doesn't have a reliable IOS implementation and Dalvik on Android is too slow for the things I'm doing and many desktops don't come with a JVM installed.
* Better type inference
* FP isolated from OOP
* Lighter indent aware syntax.
* Easier to reason about performance because of lower abstractions
* Pattern matching can be used in performance sensitive situations.
* Easier equational reasononing because FP and OO are isolated from each other.
* Initialization order bugs can't happen easily by design due to the way class ctors work.
* Easy to use Native FFI without having to write boilerplate C stubs
* A generics aware runtime so cross language .NET interop is seamless and without perf cost.
* Built-in Units of measure without perf cost or having to wait for a mature macro'ed implementation..
* Built-in Type Providers allowing typed access to untyped data and much more without having to wait for a mature macro'ed implementation.
* Built-in support for runtime code quoations, with code inspection
* Extensible computation expression syntax for more than just monads.
Here's a comparison of OCaml and F#[1], as F# is "descended" from OCaml.
Mono provides full support for F#. The F# compiler is open source (Apache license). MonoDevelop has some support for F#, but I haven't used it.
I don't fundamentally see the difference in deploying a runtime like the JVM over Mono. Mono even lets you pre-compile to native code (that's how the run on iOS, for instance), so you don't need to install the Mono runtime.
I use F# in production on Linux machines (telephony applications) and have so for many years. We use Windows to develop, test, build, etc. and then copy things over to Linux and it just works.
>I don't fundamentally see the difference in deploying a runtime like the JVM over Mono.
It's not a fundamental difference, it's about being confident the tools and support you need will be available. With the JVM you've got the full weight of IBM and Oracle behind you, and thousands of vendors selling things like latency-optimized JVMs, heap analyzers, managed hosting services. Likewise with the CLR you've got MS and a whole ecosystem of companies building tools around their VM. With Mono I don't get the same level of confidence that I'm moving with the herd, that there are many other businesses who will have hit any possible problems, that I can hire people who've used the platform before...
But my tooling comment was mostly about the development tools. I'd be super-nervous about developing on one OS/VM and deploying to another; don't you find you hit VM bugs that weren't present when you tested?