I’m still at that point in my F# journey where from time to time I have to pause and think about something that is no doubt second nature and reflexive to more experienced developers.
This morning I wanted to fold with an index and typed something like this:
myCollection |> Seq.foldi (fun i acc val -> sprintf "%s.%d.%s" acc i val) ""
To my surprise there was no foldi function.
I thought for a while then realised there didn’t need to be one and I could simply use a tuple:
myCollection |> Seq.fold (fun acc (val,i) -> sprintf "%s.%d.%s" acc i val),i+1) ("",0)
The thing I like about F# as a language, in contrast to the current functional state of C#, is the way it seems thought through: all its parts interlock and play off each other. Its not “one thing” that makes F# great – its all the bits together.