Learning .NET from F# without C#
If you know a few languages already like you say, Expert F# 2.0 by Don Syme is an excellent in depth view of F#.
Mostly you'll struggle with learning the libraries, but the MSDN reference is pretty good.
I think it's most definitely worth trying. Knowing C# won't give you any great advantages in learning F#, apart from the experience with the framework.
will F# allows me to use easily the .NET API to build fully featured applications (that may involve GUIs, sockets, whatever) without any problem?
I expect to see a few different perspectives here; I'll offer mine.
There are a few aspects to a 'language' that affect how easily/smoothly you can build 'fully-featured' applications with it:
- the language itself
- the library/framework it is paired with
- the tooling capabilities (IDE integration)
- outside support (samples, 3rd-party libraries, community)
F# is a terrific language, whose core is based on OCaml. It shares the same library/framework (.NET) as C#, and so with regards to the first two bullets, F# is as capable as C# for building such apps.
F# is a number of years younger than C# though, so both the Visual Studio tooling and the community/samples are not as mature as that of C#. Right now, there are fewer 'project templates' and 'designers' that work with F# in the VS box, and it is harder to find samples/libraries. The F# community is great, and is rapidly starting to fill in the holes of the 4th bullet (and even some of the third), but for building apps that would rely heavily on the 3rd and 4th bullets above, C# still has an advantage today (July 2010). Yes, you can build anything you like today with F#, but there are still cases, wher the end-to-end experience with C# will be smoother/easier.
In my experience, you need some C# to learn F#, especially for the .Net part.
Similar to your situation, I didn't know any .Net and C# before learning F#. The first hard part for me is asynchronous IO programming. I get a full understanding of it until I read the async chapter of CLR via C#. And I soon found that what bited me was not computation expression/monads, it is .NET. Then I continue to read CLR via C#, e.g. I know that in .Net 1d array is efficient, however 2d array is not that efficient. I also get to know delegates and events in .Net.
.Net is imperative. C# is the mother tone for .Net. IMHO, learning C# (at least reading C#) is required for an F# programmer.