I had to write 2 operators :
let inline (|/>) (seqinit:seq<'a*'T>) f = seqinit |> Seq.map (fun (key1 ,seq1) -> (key1, seq1 |> f ))
let inline (||>) (seqinit:seq<'a * seq<'b>>) (f2:seq<'b>->seq<'c*seq<'d>>) = seqinit |> Seq.map (fun (key1 ,seq1) -> (key1, seq1 |> f2 ))
In order to have the following operations, the first group transforming Seq’s to Map’s, the second group adding a key to a collection
let toMap (seqinit:seq<'a*'T>) = seqinit |/> id |> Map.ofSeq
let toMap2 (seqinit:seq<'a*seq<'b*'T>>) = seqinit |/> toMap |> toMap
let toMap3 (seqinit:seq<'a*seq<'b*seq<'c*'T>>>) = seqinit |/> toMap2 |> toMap
let groupBy2 f1 f2 (seqinit:seq<'a>) =
seqinit |> Seq.groupBy f1 ||> (Seq.groupBy f2)
let groupBy3 f1 f2 f3 (seqinit:seq<'a>) =
seqinit |> Seq.groupBy f1 ||> (Seq.groupBy f2) ||> (Seq.groupBy f3)
Are there any special name for those 2 operators |/> and ||> ?
This would help me find other such operators and not reinvent the wheel
EDIT
it is also useful for ungrouping
let ungroup (seqinit:seq<'a*seq<'b>>) = seqinit |> Seq.fold(fun state (key, keyseq) -> Seq.append state keyseq) Seq.empty
let ungroup2 (seqinit:seq<'a*seq<'b*seq<'c>>>) = seqinit |/> ungroup |> ungroup
let ungroup3 (seqinit:seq<'a*seq<'b*seq<'c*seq<'d>>>>) = seqinit |/> ungroup |/> ungroup |> ungroup
||>is already defined in FSharp.Core as'T1 * 'T2 -> ('T1 -> 'T2 -> 'U) -> 'U. Usage:(arg1, arg2) ||> func. Its compiled name isop_PipeRight2.Your definition of
|/>seems too customized to be of general use, so my guess is there isn’t a predefined name for it.