Following on from F# week, Xamarin have been running a contest to build your first F# mobile app which ends today. If you missed it you can still enter, run an F# app and get a free F# T-shirt.
Over the weekend I’ve put together a simple calculator app that includes units of measure support:
I installed the latest version of Xamarin on my Mac. The happy path seems to be the stable release channel these days, as F# is now baked into the IDE. Once it’s installed you can start straight away developing Android apps. For iOS you need to install Xcode from the Apple store too. The iOS emulator seemed to run the faster, taking just a few seconds to build and run, so I settled on that.
The Xamarin IDE includes plenty of project templates for building Android and iOS applications with F#. I used the universal single view application template for iOS as a start point, and the Creating iOS Applications in Code tutorial as a guide. I’d also recommend checking out Rachel Reese’s excellent Introduction to F# with Xamarin article.
Note: F# is a mature, open source, cross-platform language so you get the same compiler in Xamarin as you do in Visual Studio.
Units of measure
F# has built-in support for units of measure so you can write:
let speed = 100<m> / 10<s>
This unit information is used for compile time checking, it has no cost at runtime, and subsequently no meta data is available at runtime.
For the units calculator an expression parser and units implementation is required. This was a case of here’s one I wrote earlier, see:
The implementation uses a couple of F# discriminated unions for defining unit types and a simple recursive decent parser using F# active patterns for parsing expressions. No libraries were imported and the code is just over 200 lines.
You can also play with the units implementation in F# interactive, simply highlight the source in Units.fs and then right-click and execute selected in F# interactive.
Note: Google and Bing both provide unit calculators from their respective search boxes.
All the source code is available on BitBucket: https://bitbucket.org/ptrelford/units-calculator/src