F# runs on the .NET platform. This means that nearly all the major tools for the platform can be easily reused for F# code. For example, F# produces intermediary language code, with a close correspondence to the source text, and with sensible generated identifier names. This means debuggers, profilers and other tools not only work without any problems, but also that their results are just as intelligible as when applied to C# code. Furthermore, F#’s excellent bi-directional language interoperability means that you can even use code generation tools such as parser-generators.
Because of this, F# has a surprisingly powerful and complete set of tools for a research language. Traditionally, functional languages have not had good profilers or graphical debuggers. With F# these tools essentially come for free.
The most important tools supported by F# are:
- A command line compiler (fsc.exe) supporting separate compilation.
- Graphical interactive debugging (via Visual Studio).
- Parsing and Lexing (fslex.exe and fsyacc.exe).
Debugging with Visual Studio.NET is well supported. Debugging is supported through any .NET debugger, e.g. the command line “cordbg” tool that comes with the .NET Framework SDK, or the graphical debugger “DbgClr”.
F# for Visual Studio provides several features which greatly help writing F# code, both in general and specifically when using the .NET APIs.
Codesense. Within Visual Studio, F# will typecheck your file as you type.
TypeTips. Hovering over identifiers will report their type. Languages with automatic type inference are fantastic for authoring code. This extension to VS allows readers of the code to see the types without needing to work them out.
Intelisense. This allows for discovering possible completions based on type and context. It is activated when you press a “.” (dot) after an object name or directly via CTRL-J. This enables rapid discovery of APIs.
MethodTips. F# for Visual Studio displays the calling signatures for methods as they are selected. This information is available for both F# values and .NET members.
PatternTips. F# for Visual Studio displays the …
See the F# intellisense screenshots from Don’s F# Blog.
So, for example, if you have the following code:
let gc = System.Drawing.Graphics.FromImage(im)
typing CTRL-J after
gc.Draw will give a menu of possible
Draw* methods on
gc and hovering over
gc reports it’s type as
To install F# for Visual Studio, see the instructions in your release’s “README-fsharp.html” file.
You can refer to additional .dlls in your project by adding:
to the command line options under the F# project properties. Note, the F# Intelisense process is given these options when it is started, so restart Visual Studio to make Intelisense detect dll reference changes.
The following is a hello world WinForms example:
let form = new Form()
If you save the above as
fsc is in your path, you can compile and run it as follows: