Introducing Try Joinads

Welcome to Try Joinads!

This web site is an interactive tutorial that introduces joinads - a research extension of the F# language. The tutorial presents several uses of the extension. It focuses on concurrent, parallel and asynchronous programming, but it also shows several examples from other domains, including parsers and option values. Aside from uses of joinads, there are also several sections that discuss how to implement joinads for other types of values or computations.

Aside from joinads, the web site also includes examples of encoding various abstract computation types (such as monads, monoids, applicative functors and monad transformers) using F# computation expressions. These use mostly standard F# computation expressions, with an extension for applicative functors and accompany the article F# Computation Zoo.

The tutorial uses an Interactive F# console hosted in a web browser using Silverlight (Windows or Mac) or Moonlight (Linux), so you can run the tutorials in your browser and experiment on your own. The console is based on an open-source release of the F# compiler. A research implementation of the F# compiler that implements joinads is also available.

If you have any comments or suggestions regarding the tutorials, or if you have another interesting implementation of joinads or an extension of the F# compiler that could be added, please get in touch: tomas@tomasp.net or @tomaspetricek.

Joinads research extension

Introduction

The following article is the best place to start if you haven't seen joinads before. It shows a basic example and includes links to other resources.

Programming with joinads

The following articles show several examples of using joinads for concurrent, parallel and reactive programming. They use an implementation of joinad operations that is available in standard joinads library.

Implementing joinads

The following articles briefly explain how to implement joinads for several standard types of computations including option values and F# asynchronous workflows.

F# computation zoo

Monads

Semigroups and monoids

Composed computations

Applicative functors