F#: is there no UI (like WPF) for it?

With F# 3.0 and the XAML type provider it's possible to create a WPF designer for F# in Visual Studio 11. See http://www.navision-blog.de/2012/03/22/wpf-designer-for-f/


You can certainly create GUIs in F# - it's just another .NET language, after all.

Tomas Petricek's book, Functional Programming for the Real World (which I've helped out with a little bit) has various GUI examples. The source code is available to download if you want to see examples.

Admittedly some aspects of GUI programming don't map terribly well to a functional style, as there's a lot of mutation involved, but there are ways and means around that :)


F# actually has some very nice constructs for creating event-driven UI applications, such as First Class Events, Object Expressions, calling property setters from a constructor e.g.:

new Form(Text="My Window Title", Width=600, Height=400),

and much else.

However, creating a forms designer in VS reqiures a CodeDom for your language. The current CodeDom architecture works great, as long as your language looks exactly like C# or VB; it does not lend itself well to generation of F# code (this from a webcast or interview that I can't locate right now). It also requires partial classes, which if I recall correctly, are not supported in the language as of Beta 1. Rather than focus on designer support in the first release, the F# team decided to spend their resources on enhancing other parts of the language, such as asynchronous and parallel programming, etc.

What this means is that you have at least 4 choices for creating UI in F#:

  • Write all UI code by hand, which is fine for simple apps;
  • Create your F# code as a library to handle the "hard parts," like asynchronous and parallel code, or computation centric code, and call it from C#/VB;
  • Create your UI code as a C#/VB library, and both drive it from F# and delegate event handling to F#; or
  • Use a DSL or Computation Expression (monad) to simplify building the UI by hand (just discovered this while looking for other links in this answer).

Of these, calling a C# UI library from F# may be the most flexible while still retaining a familiar paradigm. But, using computation expressions for quickly building UI by hand is certainly worth looking at.

Tags:

Wpf

F#