Composite by Vitaly Kamiansky, Vladimir Ilin

<PackageReference Include="Composite" Version="1.5.5" />

 MComp

public static class MComp
public static IEnumerable<Composite<TMark, TPayload>> components<TMark, TPayload>(Composite<TMark, TPayload> source)

Returns the sequence of components of the input marked composite.

public static Composite<TMark, TPayload> empty<TMark, TPayload>(TMark mark)

Initializes an empty marked composite.

public static Composite<TMark, TPayload> ensureHasContainer<TMark, TPayload>(TMark outerContainerMark, TMark innerContainerMark, FSharpFunc<TMark, FSharpFunc<TMark, bool>> markComparer, Composite<TMark, TPayload> source)

Builds a new marked composite based on the source ensuring that a container will be present at the given mark in the given container.

public static Composite<TMark, TPayload> setValue<TMark, TPayload>(TMark containerMark, TMark valueMark, TPayload value, FSharpFunc<TMark, FSharpFunc<TMark, bool>> markComparer, Composite<TMark, TPayload> source)

Builds a new marked composite based on the source in which the value is set at the given mark in the given container.