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:

[ Update: the guys from tabbles have left a comment below – it turns out tabbles is pretty much completely in F# 🙂 ]

Comments (2)

  1. 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 🙂

  2. Art Scott says:

    @ Maurizio — What a great comment, on F#, and the F# WPF interface.