Tabbles: Organize Your Files. Written in F#
Since we've launched F# in Visual Studio 2010, we've often said "use F# for your core logic, and do the GUI with designer tools, generating some C# or Visual Basic". Case after case is arising where people are doing just this - writing AI engines in F# (e.g. Path of Go), or energy industry computation engines in F# (Simon Cousins, see his answer on stackoverflow), or social networking portals where the fundamental algorithms are in F# (Project Emporia).
Now comes a great one. Tabbles is a new way of organizing files: it combines virtual folders and tags, and auto-organizes and tags your files in very intelligent ways. It's been called "what WinFS should have been". But the best part: the developers have revealed that tabbles is written in F# wherever possible.
You can read the whole story of the evolution of tabbles here. There are lots of user stories of using tabbles here. F# programming seems to have really served them well.
Main link: www.tabbles.net
[ Update: the guys from tabbles have left a comment below - it turns out tabbles is pretty much completely in F# :-) ]
Comments
Anonymous
July 07, 2010
Actually, Tabbles is completely in F#, except for a few machine-generated user interface classes. As Visual Studio cannot (yet?) generate F# UIs, I made the Windows and UserControls with Visual Studio, which produced the xaml.cs file; I then exposed each UI element as a property and then worked entirely in F#. I simply cannot imagine using anything else than F# (in particular C#); the logic would have been so difficult to read and write as to become unmanageable and unmantainable very quickly. I dare say in C# it would have taken 3 times as long to code, with 4 times as many lines of code, with many more runtime bugs, and probably I would not have made it at all. With F# I was able to use higher-order functions, pattern matching, type inference, list comprehensions, and other constructs which allow me to adapt the code style to the way I think, not viceversa. The only drawback is that, with the callback-oriented structure imposed by WPF, I could not have a pure functional paradigm, and had to have a mutable state. You did a very good job :)Anonymous
July 07, 2010
@ Maurizio -- What a great comment, on F#, and the F# WPF interface.