@@ -19,6 +19,7 @@ open System.ComponentModel
1919[<Obsolete( " Compatibility with v1" ); EditorBrowsable( EditorBrowsableState.Never) >]
2020module Builders =
2121 open FSharpPlus.Operators
22+ open FSharpPlus.Internals
2223
2324 // Idiom brackets
2425 type Ii = Ii
@@ -100,6 +101,7 @@ module GenericBuilders =
100101
101102 open FSharpPlus.Operators
102103 open FSharpPlus.Data
104+ open FSharpPlus.Internals
103105
104106 // Idiom brackets
105107 type Ii = Ii
@@ -153,61 +155,32 @@ module GenericBuilders =
153155
154156 type StrictBuilder < '``monad < 't > ``> () =
155157 inherit Builder< '`` monad<'t> `` > ()
156- #if ! NET45
157158 member inline _.Delay ( [<InlineIfLambda>] expr ) = expr : unit -> '`` Monad<'T> ``
158159 member inline _.Run ( [<InlineIfLambda>] f ) = f () : '`` monad<'t> ``
159160 member inline _.TryWith ( [<InlineIfLambda>] expr , [<InlineIfLambda>] handler ) = TryWith.InvokeForStrict expr handler : '`` Monad<'T> ``
160161 member inline _.TryFinally ( [<InlineIfLambda>] expr , [<InlineIfLambda>] compensation ) = TryFinally.InvokeForStrict expr compensation : '`` Monad<'T> ``
161162
162163 member inline _.Using ( disposable : #IDisposable , [<InlineIfLambda>] body ) = Using.Invoke disposable body
163- #else
164- member inline _.Delay ( expr ) = expr : unit -> '`` Monad<'T> ``
165- member inline _.Run ( f ) = f () : '`` monad<'t> ``
166- member inline _.TryWith ( expr , handler ) = TryWith.InvokeForStrict expr handler : '`` Monad<'T> ``
167- member inline _.TryFinally ( expr , compensation ) = TryFinally.InvokeForStrict expr compensation : '`` Monad<'T> ``
168-
169- member inline _.Using ( disposable : #IDisposable , body ) = Using.Invoke disposable body
170- #endif
171164
172165 type DelayedBuilder < '``monad < 't > ``> () =
173166 inherit Builder< '`` monad<'t> `` > ()
174- #if ! NET45
175167 member inline _.Delay ( [<InlineIfLambda>] expr : _ -> '``Monad < 'T > ``) = Delay.Invoke expr : '`` Monad<'T> ``
176168 member _.Run f = f : '`` monad<'t> ``
177169 member inline _.TryWith ( expr , [<InlineIfLambda>] handler ) = TryWith.Invoke expr handler : '`` Monad<'T> ``
178170 member inline _.TryFinally ( expr , [<InlineIfLambda>] compensation ) = TryFinally.Invoke expr compensation : '`` Monad<'T> ``
179171 member inline _.Using ( disposable : #IDisposable , [<InlineIfLambda>] body ) = Using.Invoke disposable body : '`` Monad<'T> ``
180- #else
181- member inline _.Delay ( expr : _ -> '``Monad < 'T > ``) = Delay.Invoke expr : '`` Monad<'T> ``
182- member _.Run f = f : '`` monad<'t> ``
183- member inline _.TryWith ( expr , handler ) = TryWith.Invoke expr handler : '`` Monad<'T> ``
184- member inline _.TryFinally ( expr , compensation ) = TryFinally.Invoke expr compensation : '`` Monad<'T> ``
185- member inline _.Using ( disposable : #IDisposable , body ) = Using.Invoke disposable body : '`` Monad<'T> ``
186- #endif
187172
188173 type MonadPlusStrictBuilder < '``monad < 't > ``> () =
189174 inherit StrictBuilder< '`` monad<'t> `` > ()
190175 member _.YieldFrom expr = expr : '`` monad<'t> ``
191176 member inline _.Zero () = Empty.Invoke () : '`` MonadPlus<'T> ``
192- #if ! NET45
193177 member inline _.Combine ( a : '``MonadPlus < 'T > ``, [<InlineIfLambda>] b ) = a <|> b () : '`` MonadPlus<'T> ``
194- #else
195- member inline _.Combine ( a : '``MonadPlus < 'T > ``, b ) = a <|> b () : '`` MonadPlus<'T> ``
196- #endif
197- #if ! NET45
198178 member inline _.While ( [<InlineIfLambda>] guard , [<InlineIfLambda>] body : unit -> '``MonadPlus < 'T > ``) : '``MonadPlus < 'T > `` =
199- #else
200- member inline _.While ( guard , body : unit -> '``MonadPlus < 'T > ``) : '``MonadPlus < 'T > `` =
201- #endif
202179 let rec loop guard body =
203180 if guard () then body () <|> loop guard body
204181 else Empty.Invoke ()
205182 loop guard body
206- #if ! NET45
207183 member inline this.For ( p : #seq<'T> , [<InlineIfLambda>] rest : 'T -> '``MonadPlus < 'U > ``) =
208- #else
209- member inline this.For ( p : #seq<'T> , rest : 'T -> '``MonadPlus < 'U > ``) =
210- #endif
211184 Using.Invoke ( p.GetEnumerator () :> IDisposable) ( fun enum ->
212185 let enum = enum :?> IEnumerator<_>
213186 this.While ( enum .MoveNext, fun () -> rest enum .Current) : '`` MonadPlus<'U> `` )
@@ -216,26 +189,14 @@ module GenericBuilders =
216189 inherit StrictBuilder< '`` monad<'t> `` > ()
217190
218191 member inline _.Zero () = result () : '`` Monad<unit> ``
219- #if ! NET45
220192 member inline _.Combine ( a : '``Monad < unit > ``, [<InlineIfLambda>] b ) = a >>= ( fun () -> b ()) : '`` Monad<'T> ``
221- #else
222- member inline _.Combine ( a : '``Monad < unit > ``, b ) = a >>= ( fun () -> b ()) : '`` Monad<'T> ``
223- #endif
224193
225- #if ! NET45
226194 member inline _.While ( [<InlineIfLambda>] guard , [<InlineIfLambda>] body : unit -> '``Monad < unit > ``) : '``Monad < unit > `` =
227- #else
228- member inline _.While ( guard , body : unit -> '``Monad < unit > ``) : '``Monad < unit > `` =
229- #endif
230195 let rec loop guard body =
231196 if guard () then body () >>= fun () -> loop guard body
232197 else result ()
233198 loop guard body
234- #if ! NET45
235199 member inline this.For ( p : #seq<'T> , [<InlineIfLambda>] rest : 'T -> '``Monad < unit > ``) =
236- #else
237- member inline this.For ( p : #seq<'T> , rest : 'T -> '``Monad < unit > ``) =
238- #endif
239200 Using.Invoke ( p.GetEnumerator () :> IDisposable) ( fun enum ->
240201 let enum = enum :?> IEnumerator<_>
241202 this.While ( enum .MoveNext, fun () -> rest enum .Current) : '`` Monad<unit> `` )
@@ -247,29 +208,17 @@ module GenericBuilders =
247208 member inline _.Zero () = Empty.Invoke () : '`` MonadPlus<'T> ``
248209 member inline _.Combine ( a : '``MonadPlus < 'T > ``, b ) = a <|> b : '`` MonadPlus<'T> ``
249210
250- #if ! NET45
251211 member inline _.WhileImpl ( [<InlineIfLambda>] guard , body : '``MonadPlus < 'T > ``) : '``MonadPlus < 'T > `` =
252- #else
253- member inline _.WhileImpl ( guard , body : '``MonadPlus < 'T > ``) : '``MonadPlus < 'T > `` =
254- #endif
255212 let rec fix () = Delay.Invoke ( fun () -> if guard () then body <|> fix () else Empty.Invoke ())
256213 fix ()
257214
258- #if ! NET45
259215 member inline this.While ( [<InlineIfLambda>] guard , body : '``MonadPlus < 'T > ``) : '``MonadPlus < 'T > `` =
260- #else
261- member inline this.While ( guard , body : '``MonadPlus < 'T > ``) : '``MonadPlus < 'T > `` =
262- #endif
263216 // Check the type is lazy, otherwise display a warning.
264217 let __ () = TryWith.InvokeForWhile ( Unchecked.defaultof< '`` MonadPlus<'T> `` >) ( fun ( _ : exn ) -> Unchecked.defaultof< '`` MonadPlus<'T> `` >) : '`` MonadPlus<'T> ``
265218
266219 this.WhileImpl ( guard, body)
267220
268- #if ! NET45
269221 member inline this.For ( p : #seq<'T> , [<InlineIfLambda>] rest : 'T -> '``MonadPlus < 'U > ``) : '``MonadPlus < 'U > `` =
270- #else
271- member inline this.For ( p : #seq<'T> , rest : 'T -> '``MonadPlus < 'U > ``) : '``MonadPlus < 'U > `` =
272- #endif
273222 let mutable isReallyDelayed = true
274223 Delay.Invoke ( fun () -> isReallyDelayed <- false ; Empty.Invoke () : '`` MonadPlus<'U> `` ) |> ignore
275224 Using.Invoke ( p.GetEnumerator () :> IDisposable) ( fun enum ->
@@ -297,30 +246,18 @@ module GenericBuilders =
297246
298247 member inline _.Combine ( a : '``Monad < unit > ``, b ) = a >>= ( fun () -> b) : '`` Monad<'T> ``
299248
300- #if ! NET45
301249 member inline _.WhileImpl ( [<InlineIfLambda>] guard , body : '``Monad < unit > ``) : '``Monad < unit > `` =
302- #else
303- member inline _.WhileImpl ( guard , body : '``Monad < unit > ``) : '``Monad < unit > `` =
304- #endif
305250 let rec loop guard body =
306251 if guard () then body >>= ( fun () -> loop guard body)
307252 else result ()
308253 loop guard body
309254
310- #if ! NET45
311255 member inline this.While ( [<InlineIfLambda>] guard , body : '``Monad < unit > ``) : '``Monad < unit > `` =
312- #else
313- member inline this.While ( guard , body : '``Monad < unit > ``) : '``Monad < unit > `` =
314- #endif
315256 // Check the type is lazy, otherwise display a warning.
316257 let __ () = TryWith.InvokeForWhile ( Unchecked.defaultof< '`` Monad<unit> `` >) ( fun ( _ : exn ) -> Unchecked.defaultof< '`` Monad<unit> `` >) : '`` Monad<unit> ``
317258 this.WhileImpl ( guard, body)
318259
319- #if ! NET45
320260 member inline this.For ( p : #seq<'T> , [<InlineIfLambda>] rest : 'T -> '``Monad < unit > ``) : '``Monad < unit > ``=
321- #else
322- member inline this.For ( p : #seq<'T> , rest : 'T -> '``Monad < unit > ``) : '``Monad < unit > ``=
323- #endif
324261 let mutable isReallyDelayed = true
325262 Delay.Invoke ( fun () -> isReallyDelayed <- false ; Return.Invoke () : '`` Monad<unit> `` ) |> ignore
326263 Using.Invoke ( p.GetEnumerator () :> IDisposable) ( fun enum ->
@@ -334,11 +271,7 @@ module GenericBuilders =
334271 member _.ReturnFrom ( expr ) = expr : '`` applicative<'t> ``
335272 member inline _.Return ( x : 'T ) = result x : '`` Applicative<'T> ``
336273 member inline _.Yield ( x : 'T ) = result x : '`` Applicative<'T> ``
337- #if ! NET45
338274 member inline _.BindReturn ( x , [<InlineIfLambda>] f ) = map f x : '`` Applicative<'U> ``
339- #else
340- member inline _.BindReturn ( x , f ) = map f x : '`` Applicative<'U> ``
341- #endif
342275 member inline _.MergeSources ( t1 : '``Applicative < 'T > ``, t2: '``Applicative<'U>`` ) : '``Applicative < 'T * 'U > `` = Lift2.Invoke tuple2 t1 t2
343276 member inline _.MergeSources3 ( t1 : '``Applicative < 'T > ``, t2: '``Applicative<'U>`` , t3 : '``Applicative < 'V > ``) : '``Applicative < 'T * 'U * 'V > `` = Lift3.Invoke tuple3 t1 t2 t3
344277 member _.Run f = f : '`` Applicative<'T> ``
@@ -348,11 +281,7 @@ module GenericBuilders =
348281 member _.ReturnFrom expr : '``applicative1 < applicative2 < 't >> `` = expr
349282 member inline _.Return ( x : 'T ) : '``Applicative1 < Applicative2 < 'T >> `` = ( result >> result) x
350283 member inline _.Yield ( x : 'T ) : '``Applicative1 < Applicative2 < 'T >> `` = ( result >> result) x
351- #if ! NET45
352284 member inline _.BindReturn ( x : '``Applicative1 < Applicative2 < 'T >> ``, [<InlineIfLambda>] f : _ -> _ ) : '``Applicative1 < Applicative2 < 'U >> `` = ( map >> map) f x
353- #else
354- member inline _.BindReturn ( x : '``Applicative1 < Applicative2 < 'T >> ``, f : _ -> _ ) : '``Applicative1 < Applicative2 < 'U >> `` = ( map >> map) f x
355- #endif
356285 member inline _.MergeSources ( t1 , t2 ) : '``Applicative1 < Applicative2 < 'T >> `` = ( lift2 >> lift2) tuple2 t1 t2
357286 member inline _.MergeSources3 ( t1 , t2 , t3 ) : '``Applicative1 < Applicative2 < 'T >> `` = ( lift3 >> lift3) tuple3 t1 t2 t3
358287 member _.Run x : '``Applicative1 < Applicative2 < 'T >> `` = x
@@ -362,11 +291,7 @@ module GenericBuilders =
362291 member _.ReturnFrom expr : '``applicative1 < applicative2 < applicative3 < 't >>> `` = expr
363292 member inline _.Return ( x : 'T ) : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = ( result >> result >> result) x
364293 member inline _.Yield ( x : 'T ) : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = ( result >> result >> result) x
365- #if ! NET45
366294 member inline _.BindReturn ( x : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> ``, [<InlineIfLambda>] f : _ -> _ ) : '``Applicative1 < Applicative2 < 'U >> `` = ( map >> map >> map) f x
367- #else
368- member inline _.BindReturn ( x : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> ``, f : _ -> _ ) : '``Applicative1 < Applicative2 < 'U >> `` = ( map >> map >> map) f x
369- #endif
370295 member inline _.MergeSources ( t1 , t2 ) : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = ( lift2 >> lift2 >> lift2) tuple2 t1 t2
371296 member inline _.MergeSources3 ( t1 , t2 , t3 ) : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = ( lift3 >> lift3 >> lift3) tuple3 t1 t2 t3
372297 member _.Run x : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = x
@@ -377,11 +302,7 @@ module GenericBuilders =
377302 member _.ReturnFrom ( expr ) = expr : '`` applicative<'t> ``
378303 member inline _.Return ( x : 'T ) = pur x : '`` Applicative<'T> ``
379304 member inline _.Yield ( x : 'T ) = pur x : '`` Applicative<'T> ``
380- #if ! NET45
381305 member inline _.BindReturn ( x , [<InlineIfLambda>] f ) = map f x : '`` Applicative<'U> ``
382- #else
383- member inline _.BindReturn ( x , f ) = map f x : '`` Applicative<'U> ``
384- #endif
385306 member inline _.MergeSources ( t1 : '``Applicative < 'T > ``, t2: '``Applicative<'U>`` ) : '``Applicative < 'T * 'U > `` = map2 tuple2 t1 t2
386307 member inline _.MergeSources3 ( t1 : '``Applicative < 'T > ``, t2: '``Applicative<'U>`` , t3 : '``Applicative < 'V > ``) : '``Applicative < 'T * 'U * 'V > `` = map3 tuple3 t1 t2 t3
387308 member _.Run f : '``Applicative < 'T > `` = f
@@ -391,11 +312,7 @@ module GenericBuilders =
391312 member _.ReturnFrom expr : '``applicative1 < applicative2 < 't >> `` = expr
392313 member inline _.Return ( x : 'T ) : '``Applicative1 < Applicative2 < 'T >> `` = ( pur >> pur) x
393314 member inline _.Yield ( x : 'T ) : '``Applicative1 < Applicative2 < 'T >> `` = ( pur >> pur) x
394- #if ! NET45
395315 member inline _.BindReturn ( x : '``Applicative1 < Applicative2 < 'T >> ``, [<InlineIfLambda>] f : _ -> _ ) : '``Applicative1 < Applicative2 < 'U >> `` = ( map >> map) f x
396- #else
397- member inline _.BindReturn ( x : '``Applicative1 < Applicative2 < 'T >> ``, f : _ -> _ ) : '``Applicative1 < Applicative2 < 'U >> `` = ( map >> map) f x
398- #endif
399316 member inline _.MergeSources ( t1 , t2 ) : '``Applicative1 < Applicative2 < 'T >> `` = ( map2 >> map2) tuple2 t1 t2
400317 member inline _.MergeSources3 ( t1 , t2 , t3 ) : '``Applicative1 < Applicative2 < 'T >> `` = ( map3 >> map3) tuple3 t1 t2 t3
401318 member _.Run x : '``Applicative1 < Applicative2 < 'T >> `` = x
@@ -405,11 +322,7 @@ module GenericBuilders =
405322 member _.ReturnFrom expr : '``applicative1 < applicative2 < applicative3 < 't >>> `` = expr
406323 member inline _.Return ( x : 'T ) : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = ( pur >> pur >> pur) x
407324 member inline _.Yield ( x : 'T ) : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = ( pur >> pur >> pur) x
408- #if ! NET45
409325 member inline _.BindReturn ( x : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> ``, [<InlineIfLambda>] f : _ -> _ ) : '``Applicative1 < Applicative2 < 'U >> `` = ( map >> map >> map) f x
410- #else
411- member inline _.BindReturn ( x : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> ``, f : _ -> _ ) : '``Applicative1 < Applicative2 < 'U >> `` = ( map >> map >> map) f x
412- #endif
413326 member inline _.MergeSources ( t1 , t2 ) : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = ( map2 >> map2 >> map2) tuple2 t1 t2
414327 member inline _.MergeSources3 ( t1 , t2 , t3 ) : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = ( map3 >> map3 >> map3) tuple3 t1 t2 t3
415328 member _.Run x : '``Applicative1 < Applicative2 < Applicative3 < 'T >>> `` = x
0 commit comments