F #: ошибка при попытке скопировать и обновить запись через интерфейс

Я пытаюсь сделать функцию, которая превращает любую квартируseq<IHierarchy> в иерархию. По сути, все, что имеет parentID и последовательность потомков, должно быть в состоянии быть превращено в иерархию. Вместо того, чтобы сделать Hierarchy базовым классом со свойствами parentID и потомков [мы не можем, поскольку записи являются запечатанными классами], мне было интересно, можно ли сделать его IHierarchy с двумя абстрактными полями, которые мы реализуем для каждого класса (parentID и дочерние элементы) ,

Я приложил приведенный ниже код, включая функцию makeHierarchy, которая пытается превратить квартируseq<IHierarchy> в иерархическую структуру IHierarchies. Однако, когда я пытаюсь использовать синтаксис записи и обновления записи (то есть: {узел с детьми = ...}), я получаю сообщение об ошибке «Тип IHierarchy не содержит поле потомков». Я немного запутался, как заставить синтаксис record {with} работать для этого типа в интерфейсе. Разве это не возможно? Любая помощь будет оценена, так как я довольно новичок в F #.

module Hierarchy = 
    type IHierarchy =
        abstract member parentID: Option<int> 
        abstract member children: seq<IHierarchy>

module SalesComponents = 
    open Hierarchy
    type SalesComponentJson = JsonProvider<""" [{ "ID":1, "parentID":0, "name":"All Media" }, { "ID":1, "parentID":null, "name":"All Media" }]  """, SampleIsList=true>
    type SalesComponent  = {
                            ID: int; 
                            parentID: Option<int>; 
                            children: seq<SalesComponent>; 
                            name: string
                           }
                           interface IHierarchy with
                            member x.parentID = x.parentID 
                            member x.children = x.children |> Seq.map (fun c -> c :> IHierarchy)

open Hierarchy
open SalesComponents
let main argv =   
    let makeHierarchy hierarchyRecords:seq<IHierarchy> = 
        let root = hierarchyRecords |> Seq.tryFind (fun sc -> sc.parentID.IsNone)
        let rec getHierarchy (node: IHierarchy, scs: seq<IHierarchy>) = 
            {node with children = scs |> Seq.filter (fun sc -> sc.parentID.IsSome && sc.parentID.Value = node.ID )
                                      |> Seq.map    (fun sc -> getHierarchy(sc,scs))}
        root |> Option.map (fun r -> getHierarchy(r,hierarchyRecords) )

Ответы на вопрос(1)

Ваш ответ на вопрос