Skip to content

Commit d97c5eb

Browse files
committed
+ applicative3'
1 parent 390ac84 commit d97c5eb

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/FSharpPlus/Builders.fs

+13
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,16 @@ module GenericBuilders =
230230
member inline _.MergeSources3 (t1, t2, t3) : '``Applicative1<Applicative2<'T>>`` = (map3 >> map3) tuple3 t1 t2 t3
231231
member _.Run x : '``Applicative1<Applicative2<'T>>`` = x
232232

233+
/// Generic 3 layers ZipApplicative CE builder.
234+
type ZipApplicativeBuilder3<'``applicative1<applicative2<applicative3<'t>>>``> () =
235+
member _.ReturnFrom expr : '``applicative1<applicative2<applicative3<'t>>>`` = expr
236+
member inline _.Return (x: 'T) : '``Applicative1<Applicative2<Applicative3<'T>>>`` = (pur >> pur >> pur) x
237+
member inline _.Yield (x: 'T) : '``Applicative1<Applicative2<Applicative3<'T>>>`` = (pur >> pur >> pur) x
238+
member inline _.BindReturn (x: '``Applicative1<Applicative2<Applicative3<'T>>>``, [<InlineIfLambda>]f: _ -> _) : '``Applicative1<Applicative2<'U>>`` = (map >> map >> map) f x
239+
member inline _.MergeSources (t1, t2) : '``Applicative1<Applicative2<Applicative3<'T>>>`` = (map2 >> map2 >> map2) tuple2 t1 t2
240+
member inline _.MergeSources3 (t1, t2, t3) : '``Applicative1<Applicative2<Applicative3<'T>>>`` = (map3 >> map3 >> map3) tuple3 t1 t2 t3
241+
member _.Run x : '``Applicative1<Applicative2<Applicative3<'T>>>`` = x
242+
233243
/// Creates a (lazy) monadic computation expression with side-effects (see http://fsprojects.github.io/FSharpPlus/computation-expressions.html for more information)
234244
let monad<'``monad<'t>``> = new MonadFxBuilder<'``monad<'t>``> ()
235245

@@ -251,4 +261,7 @@ module GenericBuilders =
251261
/// Creates a (non sequential) applicative computation expression which compose effects of two Applicatives.
252262
let applicative2'<'``ZipApplicative1<ZipApplicative2<'T>>``> = ZipApplicativeBuilder2<'``ZipApplicative1<ZipApplicative2<'T>>``> ()
253263

264+
/// Creates a (non sequential) applicative computation expression which compose effects of three Applicatives.
265+
let applicative3'<'``Applicative1<Applicative2<Applicative3<'T>>>``> = ZipApplicativeBuilder3<'``Applicative1<Applicative2<Applicative3<'T>>>``> ()
266+
254267
#endif

0 commit comments

Comments
 (0)