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)

Reactive programming with async workflows


We will now generalize the async model so that it can be used not only in async workflows, but also with IObservable streams to achieve reactiveness. The IObservable interface is used to manipulate events as if they were sequences (or streams). The main difference with IEnumerable is that the latter is pull-based (our code decides when to pull the next item from the sequence) while the former is push-based; we do not know when the next event will happen so we can only react to new inputs in the stream.

Note

The FSharp.Core library also provides functions in the Event module to manipulate events directly, as if they were streams, without having to convert them to IObservable.

This means that we need constructs that can create observables, as opposed to only async workflows. Essentially, it should be possible to await all kinds of events produced by Event or IObservable streams. In this section, we will only go through the default options available in...