type CsvType(id, name, parentId) =
member this.Id : int = id
member this.Name : string = name
member this.ParentId : int = parentId
type OutType(id, name, children) =
member this.Id : int = id
member this.Name : string = name
member this.Children : OutType list = children
let rec buildTree (data : CsvType list) value =
List.filter (fun row -> row.ParentId = value) |>
OutType(row.Id, row.Name, (buildTree data row.Id)))
new CsvType(1, "Shinobi", 0);
new CsvType(2, "Jubei Kibagami", 0);
new CsvType(3, "Kagero", 2);
new CsvType(4, "Splinter", 0);
new CsvType(5, "Leonardo", 4);
new CsvType(6, "Raphael", 4);
new CsvType(7, "Donatello", 4);
new CsvType(8, "Michelangelo", 4);
let tree = buildTree csvData 0