# F# method to insert, update, or delete events in a dictionary

I have the following code:

    member this.ProcessEvent(sourceStream: OrderResponse) =
match sourceStream.Action with
| Action.Partial
| Action.Insert ->
sourceStream.Data
|> Seq.iter (fun x -> this.orderState.[x.OrderId] <- this.ConvertFullOrder x)
| Action.Update ->
sourceStream.Data
|> Seq.iter (fun x -> this.orderState.[x.OrderId] <- this.UpdateOrder x this.orderState.[x.OrderId])
| Action.Delete ->
sourceStream.Data
|> Seq.iter (fun x -> this.orderState.Remove(x.OrderId) |> ignore)
| _ -> ()


It is processing a list of events and an action. The data is processed and stored in a dictionary. The action tells to insert, update or delete some of the records and applies to all the events received in the same message.

For each case, I iterate through the sourceStream.Data list.

Is there a better / more readable way where I can declare I am going to process that list and then, based on the Action, have different code? this would allow to remove the multiple sourceStream.Data |> bits and specify it only once.

• Whoever VTCd this question, please explain. – IEatBagels Oct 30 '19 at 12:40
• I didn't VTC but my presumption is that it would be helpful to have sample usage of this function so reviewers can have a better sense of how it is utilized – Sᴀᴍ Onᴇᴌᴀ Oct 30 '19 at 16:47

You have probably found a good solution long time ago, but here is my suggestion:

member this.ProcessEvent(sourceStream: OrderResponse) =
let handler: (Order -> unit) =
match sourceStream.Action with
| Action.Partial
| Action.Insert -> (fun x -> this.orderState.[x.OrderId] <- this.ConvertFullOrder x)
| Action.Update -> (fun x -> this.orderState.[x.OrderId] <- this.UpdateOrder x this.orderState.[x.OrderId])
| Action.Delete -> (fun x -> this.orderState.Remove(x.OrderId) |> ignore)
| _ -> (fun x -> ())

sourceStream.Data |> Seq.iter handler


I'm not sure. what type x has, so for the illustration I just call it Order in the handler definition.

• yes, by now I have a solution, but this is elegant, I like it. – Thomas Jul 5 '20 at 16:26