Book Image

Mastering F#

By : Alfonso García-Caro Núñez, Suhaib Fahad
Book Image

Mastering F#

By: Alfonso García-Caro Núñez, Suhaib Fahad

Overview of this book

F# is a multi-paradigm programming language that encompasses object-oriented, imperative, and functional programming language properties. Now adopted in a wide range of application areas and is supported both by industry-leading companies who provide professional tools and by an active open community, F# is rapidly gaining popularity as it emerges in digital music advertising, creating music-focused ads for Spotify, Pandora, Shazam, and anywhere on the web. This book will guide you through the basics and will then help you master F#. The book starts by explaining how to use F# with Visual Studio, file ordering, and the differences between F# and C# in terms of usage. It moves on to explain the functional core of F# such as data types, type declarations, immutability, strong type interference, pattern matching, records, F# data structures, sequence expressions, and lazy evaluation. Next, the book takes you through imperative and asynchronous programming, F# type providers, applications, and testing in F#. Finally, we look into using F# with distributed programming and using F# as a suitable language for data science. In short, this book will help you learn F# for real-world applications and increase your productivity with functional programming.
Table of Contents (16 chapters)

Asynchronous workflows in F#


Asynchronous (async) workflows are computation expressions that are set up to run asynchronously. It means that the system runs without blocking the current computation thread when an I/O or another asynchronous process is performed.

You may be wondering why do we need asynchronous programming, and why can't we just use the threading concepts that we have used for so long. The problem with OS threads is that the operation occupies the thread for the entire time that something happens, or when a computation is done. On the other hand, with asynchronous programming, the runtime will enable a thread only when it is required, otherwise it will be a normal code. There is also lot of marshalling and unmarshalling code (infrastructure code) that we will write around to overcome the issues that we face when directly dealing with the OS threads. Thus, async model allows the code to execute efficiently, still preventing locking the main thread when we perform expensive...