Совсем недавно Tomas Petricek выложил в свет (оригинальный пост здесь) эксперементальную сборку компилятора F# 2.0, поддерживающую механизм под названием joinads, а так же некоторые дополнительные модификации.

Основная информация о механизме “джоинад” есть в публикации “Reactive, parallel and concurrent programming in F#” (pdf здесь), описывающей области применения, необходимые расширения синтаксиса F# computation expressions, правила трансформации кода (однако реальные правила трансформации кода несколько отличаются от изложенных в публикации, например, Choose не получает на вход список, а используюся несколько вложенных друг в друга вызовов Choose).

Например, так выглядит код использования джоинады future, запускающий несколько параллельных задач и ожидающих их результатов:

let parallelOr = future {
  match! (after 1000 true), (after 100 true) with
  | !true, _ -> return true
  | _, !true -> return true
  | !a, !b -> return a || b
}

Если любая из задач возвратит true, то всё выражение сразу будет вычислено как true. В случае, если любая из задач возвратит false, будет произведено ожидание результата другой задачи и выражение будет вычислено как логическое || результатов обоих задач (третий кейс).

Дополнительно эксперементальный компилятор поддерживает механизм “идиом” (аппликативных функторов из мира haskell) с помощью использования синтаксиса let! … and внутри computation expressions. Подробнее про идиомы можно прочитать в том же блоге Томаса - 1 и 2 (если не напрягает query syntax C#, конечно).

Следует предупредить, что новые ключевые слова и конструкции, такие как match!, поддерживаются на уровне компилятора и интерактивной консоли F#, однако использование данный расширений непосредственно в Visual Studio затруднительно, так как студия использует собственные парсер и модель кода F# - вы будете получать море синтаксических ошибок, однако код будет компилироваться и исправно запускаться.

Скачать модифицированный компилятор можно здесь: сборка (zip, 7mb), исходный код (для mono). Помимо этого, здесь доступны примеры реализаций джоинад future и maybe, а так же идиомы ziplist.