F# - First Impressions
It seems like it is time to inform my multimillion reader base about my impressions about the F# programming language. As I mentioned in my previous post I picked F# over IronPython because Python uses indentation to define scope. The first thing that got me annoyed about F# is that there is an option to turn on indentation based syntax like in Python and everyone uses it. At least it is an option and unlike Python when this option is turned on the F# compiler forces the use of spaces instead of tabs. On the other hand
let wordCount text =
let words = String.split [' '] text
let wordSet = Set.of_list words
let nWords = words.Length
let nDups = words.Length - wordSet.Count
(nWords,nDups)
really looks better than
let wordCount text =
let words = String.split [' '] text in
let wordSet = Set.of_list words in
let nWords = words.Length in
let nDups = words.Length - wordSet.Count in
(nWords,nDups);;
Right now when I am trying the examples from the "Expert F#" book I am always rewriting them with the heavy syntax. That way I am learning both types of syntax and what is more writing these keywords helps understand how expressions are composed. However when you get used to it these tokens are just messing around. Maybe with time I will get used to indentation based syntax and will give IronPython a try.
Otherwise F# looks cool but strange. It is not even lispish. The first thing one needs to do is let go of type declarations which is not so simple because F# is as strongly typed as C#. It takes time to get used to type inference even if one has experience with C#'s way of doing it. Another thing that seems strange at first is that functions can return more than one value by automatically forming a tuple. Tuples are then decomposed back to variables using pattern matching i.e. placing the first element of the tuple in the first variable, the second element in the second variable and so on. However this can get more complicated because an element in a tuple can itself be a tuple. Worth noting is that one can switch to C# style programming at any time. I hope I will not get tempted to program in F# like I do in C# when I try to do something myself because there will be no point in using F# if I write it like C#. What is more C# is better at being C# than F# is.
Overall I think F# is fun but I have to wait to see what happens when I get into the deep waters.