tags:

views:

924

answers:

6

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?

+3  A: 

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".

Have a look at wxHaskell or Gtk2Hs :)AFAIK, F# can be integrated with WPF.
fishlips
Ok, i added that.
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 - 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
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.
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.
Nice edits... downvote removed :-)
James Hugard
+5  A: 

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 :)

Jon Skeet
oh, so i can say that F# (or functional programming) is used mainly for developing libraries for something else (eg. C#) to use?
iceangel89
No, I don't think that sort of generalisation is really appropriate either.
Jon Skeet
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
+3  A: 

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#.

jalf
+1  A: 

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).

Botz3000
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
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
Just 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
Down vote removed after latest edits.
James Hugard
+17  A: 

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 IIRC 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 familar paradigm. But, using computation expressions for quickly building UI by hand is certainly worth looking at.

James Hugard
Also, 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
DannyAsher 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
A: 
Jon Harrop