F #: un valor recursivo que puede hacer referencia a sí mismo
Tengo un registro:
type node = {
content : string;
parent : node option;
branch : string option;
children : seq<node> option;
}
Lo que quiero instanciar de esta manera:
let rec treeHead = {
content = "Value"
parent = None;
branch = None;
children = tree (Some(treeHead)) rows;
};
Dónde
let rec tree (parent:node option) (rows:seq<CsvRow>) :seq<node> option
Es una función recursiva que obtiene los hijos de un nodo (para construir un árbol). Entonces, como puede ver, el objeto treeHead necesita llamarse a sí mismo a través de la función de árbol.
Quiero hacerlo de esta manera para evitar usar treeHead como un valor mutable y cambiar su propiedad secundaria después.
Mi pregunta es que el treeHead está generando un error y una advertencia. El error dice:
El valor 'treeHead' se evaluará como parte de su propia definición.
Y la advertencia dice:
Esta y otras referencias recursivas a los objetos que se están definiendo se comprobarán para determinar la solidez de la inicialización en tiempo de ejecución mediante el uso de una referencia retrasada. Esto se debe a que está definiendo uno o más objetos recursivos, en lugar de funciones recursivas. Esta advertencia se puede suprimir mediante el uso de '#nowarn "40"' o '--nowarn: 40'.
Primero, ¿estoy haciendo esto de la manera correcta (quiero decir, sin considerar la opción mutable)? ¿Y cómo debo corregir esto?