From e5cd6497259bc0d121659a574ac08309b99497e3 Mon Sep 17 00:00:00 2001 From: ncave Date: Sat, 18 Nov 2017 20:47:18 -0800 Subject: [PATCH] minor IL simplification --- src/fsharp/FSharp.Core/list.fs | 24 +++++++++--------------- src/fsharp/FSharp.Core/list.fsi | 2 +- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index 6b31ea2b0f..fdda3f9fc7 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -212,15 +212,11 @@ namespace Microsoft.FSharp.Collections [] let fold<'T,'State> folder (state:'State) (list: 'T list) = - match list with - | [] -> state - | _ -> - let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(folder) - let rec loop s xs = - match xs with - | [] -> s - | h::t -> loop (f.Invoke(s,h)) t - loop state list + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(folder) + let mutable acc = state + for x in list do + acc <- f.Invoke(acc, x) + acc [] let pairwise (list: 'T list) = @@ -356,12 +352,10 @@ namespace Microsoft.FSharp.Collections let exists predicate list = Microsoft.FSharp.Primitives.Basics.List.exists predicate list [] - let inline contains value source = - let rec contains e xs1 = - match xs1 with - | [] -> false - | h1::t1 -> e = h1 || contains e t1 - contains value source + let rec contains value source = + match source with + | [] -> false + | h::t -> if h = value then true else contains value t let rec exists2aux (f:OptimizedClosures.FSharpFunc<_,_,_>) list1 list2 = match list1,list2 with diff --git a/src/fsharp/FSharp.Core/list.fsi b/src/fsharp/FSharp.Core/list.fsi index 6ba6f988a2..2cc18ac71e 100644 --- a/src/fsharp/FSharp.Core/list.fsi +++ b/src/fsharp/FSharp.Core/list.fsi @@ -102,7 +102,7 @@ namespace Microsoft.FSharp.Collections /// The input list. /// True if the input list contains the specified element; false otherwise. [] - val inline contains: value:'T -> source:'T list -> bool when 'T : equality + val contains: value:'T -> source:'T list -> bool when 'T : equality /// Returns a list that contains no duplicate entries according to generic hash and /// equality comparisons on the entries.