i recently saw some videos on F#. it seems it used mainly for Service or Classes only? i see no "F# WPF" app in VS2010 Beta?
7 Answers
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.

- 3,321
- 9
- 39
- 77

- 3,232
- 1
- 25
- 36
-
7Also, there is an excellent series of articles on creating WPF apps in F# here: http://blogs.msdn.com/dsyme/archive/2008/01/05/learning-wpf-through-f-and-vice-versa-by-john-liao.aspx – James Hugard Jun 28 '09 at 16:31
-
1DannyAsher over on http://hubFS.com took the Computation Expression (monad) linked in the answer above and applied it directly to WPF. There were a few issues, but Brian on the F# dev team helped us get it debugged (scroll to the end of the thread). See the thread here: http://cs.hubfs.net/forums/thread/11127.aspx – James Hugard Jul 04 '09 at 03:14
-
1Note that you can call property setters in a C# constructor: var f = new Form { Text="My Window Title", Width=600, Height=400 }; – Brennan Vincent Jun 14 '11 at 23:06
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 :)
-
oh, so i can say that F# (or functional programming) is used mainly for developing libraries for something else (eg. C#) to use? – iceangel89 Jun 28 '09 at 12:55
-
No, I don't think that sort of generalisation is really appropriate either. – Jon Skeet Jun 28 '09 at 13:11
-
I agree to some extent, but the type of language F# is makes it easy to create GUI's. Whether it's good functional style or not. :) – Rayne Jun 28 '09 at 16:35
-
-
@Ken: I wouldn't claim to be enough of an expert to give good advice on that front, I'm afraid. – Jon Skeet Feb 08 '14 at 12:55
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/

- 2,784
- 1
- 28
- 42
We sell a commercial library called F# for Visualization that is written in 100% F# code and uses WPF to provide interactive graphics with typeset mathematics from your F# code:
(source: ffconsultancy.com)
So it is certainly possible to write GUI apps in F# using WPF.

- 21,988
- 13
- 81
- 109

- 48,105
- 13
- 171
- 274
It is a .NET language, so it can use the .NET class library. Which means Winforms, WPF or anything else you might use in C#.

- 243,077
- 51
- 345
- 550
Updated according to the link by James Hugard
For now F# will not be used much for GUIs because it is not the most important use case for it. From Don Syme's blog:
In this first supported release, our aim has to be to focus on the core strengths of F# for exploratory programming with F# Interactive, programming with data and implementing parallel and asynchronous components.
Although you can theoretically use F# and the standard GUI libraries if you need a GUI you should use VB or C#:
F# users should use the Visual Studio designer tools to generate C# or Visual Basic code and incorporate those components into their F# applications.
In the longer term "presentation-oriented designer tools that generate F# code" are, according to Syme, "definitely feasible".

- 3,247
- 2
- 27
- 31
-
Have a look at wxHaskell or Gtk2Hs :) AFAIK, F# can be integrated with WPF. – fishlips Jun 28 '09 at 11:47
-
Sure, you can do OOP and state quite well. Still, the focus is on the functional side of the language. Otherwise, what would be the reason why there is no GUI project type? – weiqure Jun 28 '09 at 17:17
-
1@weiqure - That statement might be more true for other ML derived languages, but only slightly so. IMHO, the F# designers have done a bang-up job making OOP in general, and .NET integration in particular, very natural and, in many cases, substantially easier than in, say, C#; e.g. object expressions, implicit constructors, property accessors, property setters in constructors, automatic conversion of lambdas to delegates, first-class events, not to mention type inference by virtue of being an ML-derived language. Most of these are in direct support of stateful, mutable OOP-style programming. – James Hugard Jun 28 '09 at 18:00
-
Sorry if I caused misunderstandings. F# supports these features nicely. It is not worse for GUI programming than C# or VB. But I still think that this is not the main use case for the language which I think is the reason why there is 'no "F# WPF"' project in WPF which the original question was about. Though, if there is another reason I'll be happy to learn about it. – weiqure Jun 28 '09 at 18:15
-
I just read your comment on Botz3000 answer. So the answer to the original question would be that for now only the "core strengths" should be focused. I'll update the answer according to that. – weiqure Jun 28 '09 at 18:30
-
1You're quoting Don Syme out of context. His statements were specifically about the use of UI designer tools like Expression Blend. He was not talking about GUI programming in general. – J D Feb 04 '13 at 00:30
Of course you can use all the WPF classes from F#, too. You can create Windows, controls and everything else from F# and I also sometimes use it from the F# console.
It's not as tightly integrated into Visual Studio as C# or VB yet, but as you can see in the comments, designer support in the future is feasible. I guess we'll have to wait until then (or use other tools).

- 39,020
- 8
- 103
- 127
-
Downvoted because while the emphasis of the 1.0 release is utility and core code, the *intention* is to eventually bring F# to full integration, including forms designer, etc. – James Hugard Jun 28 '09 at 17:44
-
Oh, sorry, didn't know that. But full integration of F# sounds very interesting and like it's gonna be fun using it. Looking forward to it. – Botz3000 Jun 28 '09 at 17:51
-
1Just to back this up, see the VS2010 integration announcement at http://blogs.msdn.com/dsyme/archive/2008/12/10/fsharp-to-ship-as-part-of-visual-studio-2010.aspx. Specifically, "In this first supported release, our aim has to be to focus on the core strengths of F# for exploratory programming with F# Interactive, programming with data and implementing parallel and asynchronous components." In a later comment, "Don says: presentation-oriented designer tools that generate F# code are definitely feasible in the longer term." – James Hugard Jun 28 '09 at 18:23