Skip to content

Commit 09503a8

Browse files
committed
Internal InlineIfLambda in NET45
1 parent 017d252 commit 09503a8

File tree

5 files changed

+12
-98
lines changed

5 files changed

+12
-98
lines changed

src/FSharpPlus/Builders.fs

Lines changed: 2 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ open System.ComponentModel
1919
[<Obsolete("Compatibility with v1"); EditorBrowsable(EditorBrowsableState.Never)>]
2020
module 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

src/FSharpPlus/Control/Traversable.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ type Traverse =
185185
[<Obsolete;CompiledName("Traverse")>]
186186
static member TraverseLegacy (t:'t seq ,f:'t->'u option , [<Optional>]_output:option<seq<'u>>, [<Optional>]_impl:Default2): seq<'u> option =
187187
let mapped = Seq.map f t
188-
Sequence.ForInfiniteSequences (mapped, IsLeftZero.Invoke, List.toSeq)
188+
Sequence.ForInfiniteSequences (mapped, IsLeftZero.Invoke, List.toSeq, Return.Invoke)
189189

190190
type Sequence with
191191

src/FSharpPlus/Extensions/Result.fs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ namespace FSharpPlus
55
module Result =
66
open FSharp.Core.CompilerServices
77
open System
8+
open FSharpPlus.Internals
89

910
/// Creates an Ok with the supplied value.
1011
[<Obsolete("Prefer Result.Ok")>]
@@ -99,11 +100,7 @@ module Result =
99100
/// Error "Hello world" |> Result.iter (printfn "%s") // prints "Hello world"
100101
/// </code>
101102
/// </example>
102-
#if !NET45
103103
let inline iterError ([<InlineIfLambda>]action: 'Error -> unit) (source: Result<'T, 'Error>) = match source with Ok _ -> () | Error x -> action x
104-
#else
105-
let inline iterError (action: 'Error -> unit) (source: Result<'T, 'Error>) = match source with Ok _ -> () | Error x -> action x
106-
#endif
107104

108105
/// <summary>Extracts a value from either side of a Result.</summary>
109106
/// <param name="fOk">Function to be applied to source, if it contains an Ok value.</param>

src/FSharpPlus/Internals.fs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,3 +517,9 @@ module FindLastSliceIndex =
517517
exception AggregateException of Exception seq
518518

519519
#endif
520+
521+
#if NET45
522+
type InlineIfLambdaAttribute()=class
523+
inherit Attribute()
524+
end
525+
#endif

src/FSharpPlus/Operators.fs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ namespace FSharpPlus
22

33
open System
44
open FSharpPlus.Control
5+
open FSharpPlus.Internals
56

67
/// Generic functions and operators
78
[<AutoOpenAttribute>]
@@ -58,11 +59,8 @@ module Operators =
5859
/// Executes a side-effect function and returns the original input value. Same as 'tap' but with arguments flipped.
5960
/// </summary>
6061
/// <category index="0">Common Combinators</category>
61-
#if !NET45
6262
let inline (|-) source ([<InlineIfLambda>]f: 'T -> unit) = f source; source
63-
#else
64-
let inline (|-) source (f: 'T -> unit) = f source; source
65-
#endif
63+
6664

6765
/// <summary>
6866
/// Executes a side-effect function and returns the original input value.

0 commit comments

Comments
 (0)