Skip to content

Commit 9a0e7c6

Browse files
committed
First draft
1 parent 3962979 commit 9a0e7c6

File tree

6 files changed

+457
-120
lines changed

6 files changed

+457
-120
lines changed

src/FSharpPlus/Builders.fs

+12
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,15 @@ module GenericBuilders =
210210
member _.Run x : '``Applicative1<Applicative2<Applicative3<'T>>>`` = x
211211

212212

213+
/// Generic Parallel Applicative CE builder.
214+
type ParallelBuilder<'``applicative<'t>``> () =
215+
member _.ReturnFrom (expr) = expr : '``applicative<'t>``
216+
member inline _.Return (x: 'T) = ParReturn.Invoke x : '``Applicative<'T>``
217+
member inline _.Yield (x: 'T) = ParReturn.Invoke x : '``Applicative<'T>``
218+
member inline _.BindReturn(x, [<InlineIfLambda>]f) = map f x : '``Applicative<'U>``
219+
member inline _.MergeSources (t1: '``Applicative<'T>``, t2: '``Applicative<'U>``) : '``Applicative<'T * 'U>`` = ParLift2.Invoke tuple2 t1 t2
220+
member inline _.MergeSources3 (t1: '``Applicative<'T>``, t2: '``Applicative<'U>``, t3: '``Applicative<'V>``) : '``Applicative<'T * 'U * 'V>`` = ParLift3.Invoke tuple3 t1 t2 t3
221+
member _.Run f = f : '``Applicative<'T>``
213222

214223
/// Creates a (lazy) monadic computation expression with side-effects (see http://fsprojects.github.io/FSharpPlus/computation-expressions.html for more information)
215224
let monad<'``monad<'t>``> = new MonadFxBuilder<'``monad<'t>``> ()
@@ -226,4 +235,7 @@ module GenericBuilders =
226235
/// Creates an applicative computation expression which compose effects of three Applicatives.
227236
let applicative3<'``Applicative1<Applicative2<Applicative3<'T>>>``> = ApplicativeBuilder3<'``Applicative1<Applicative2<Applicative3<'T>>>``> ()
228237

238+
/// Creates a parallel applicative computation expression.
239+
let par<'``Applicative<'T>``> = ParallelBuilder<'``Applicative<'T>``> ()
240+
229241
#endif

0 commit comments

Comments
 (0)