Getting started with F#
tl;dr This post is a list of resources for learning F# and an overview of my mini-project: Stock Estimator.
I couldn't resist anymore, and I finally tried F#. For the first two days, it was painful. Some elements of F# syntax are weird. However, after getting used to that, F# became a joy, and instead of a week (as I planned) I spent with F# almost two months.
Getting Started
- F# Jumpstart (Pluralsight) 1h 25m - brief introduction to F#, good for the beginning the get the sneak peak
- Introduction to F# by Don Syme (part1, part2, part3)
- F# Cheatsheet - great overview of F# features
- F# for C# Developers by Phillip Trelford
- Understanding the World with F# by Tomas Petricek
- Try F# - interactive tutorial for learning F# (works only in IE because of Silverlight)
- Functional Koans - F# - a collection of F# exercises inspired by Ruby koans that requires you to fix failing unit tests one by one (fun and informative!)
Deep Dive
- F# for beginners by Sacha Barber (Microsoft MVP) - extensive overview of almost all features of F# language (good as reference)
- Accessing Data with F# Type Providers (Pluralsight) by Tomas Petricek (2h 14m)
- F# Functional Data Structures (Pluralsight) (3h 44m) - deep dive into F# Data Structures
- Type-Driven Development with F# (Pluralsight) by Mark Seemann (3h 56m)
- F# for fun and profit - solid source of knowledge to learn more about F# (when you know the basics)
- fsharp.org - encyclopedia of resources for all topics related to F#
- F# Advent Calendar 2014 and 2015 - set of articles about different topics related to F#
- Domain modelling with the F# type system by Scott Wlaschin
- Railway Oriented Programming — error handling in functional languages by Scott Wlaschin
- Domain-Driven Design, Event Sourcing and CQRS with F# and EventStore by Lev Gorodinski
There is also a book written by Jon Skeet and Tomas Petricek: Real World Functional Programming: With Examples in F# and C#.
Testing
- Unit Testing with F# (Pluralsight) by Mark Seemann (1h 32m)
- Introduction to Property-based Testing with F# (Pluralsight) by Mark Seemann (1h 34m)
- Test-Driven Development with F# (Pluralsight) by Mark Seemann (2h 17m)
Web Development
The most popular F# Web Framework is Suave. There is great SuaveMusicStore tutorial (code), which is inspired by ASP.NET MVC Music Store tutorial. If you want to build Web API with F#, check Building REST Api in Fsharp Using Suave.
It is also worth to check End-to-end Functional Web Development by Tomas Petricek where he showcases building web app with Suave.
For more, check Web Programming with F# Guide.
Stock Estimator
I created F# based app for predicting future stock prices ($1,000,000 idea!). The back-end is written in F# and communicates with stock data API (Yahoo Finance) through the F# type provider. There is also Suave Web API (microservice), and ASP.NET Core web app that communicates with it. Front-end is powered by Aurelia Framework, and D3 library. In other words: I built an F# microservice, consumed it from a non-F# app, and have reusable logic in a separate project. All communication with microservice happens through the client (with Aurelia Framework). So, there is no usage of F# from C#, but...I also created a simple Console app (with C#) that uses mentioned F# logic. There is also Windows Forms app for displaying estimates, written in F#, that also uses reusable logic.
Entire source code is available on github. Check it out!
Summary
Programming in F# is pure joy! It's a great language for working with data. Moreover, F# fits perfectly into today's World of microservices. You don't have to rewrite your already existing app or create an entire app with F#. You can just create one microservice with F#, and see how it works for you!