Types F歧视联盟中的快速记录

Types F歧视联盟中的快速记录,types,f#,record,Types,F#,Record,我试着这样做: type Tree<'a> = | Leaf | Node of { value:'a ; left:Tree<'a> ; right:Tree<'a> } 类型树} 但f#似乎并不支持这一点(奇怪)。 但是如何使用单独的记录类型来实现这一点呢 陷入循环依赖。使用关键字和处理循环依赖: type Rec<'a> = { value:'a ; left:Tree<'a> ; right:Tree<'a>

我试着这样做:

type Tree<'a> =
| Leaf 
| Node of { value:'a ; left:Tree<'a> ; right:Tree<'a> }
类型树}
但f#似乎并不支持这一点(奇怪)。 但是如何使用单独的记录类型来实现这一点呢
陷入循环依赖。

使用关键字
处理循环依赖:

type Rec<'a> = { value:'a ; left:Tree<'a> ; right:Tree<'a> }

and Tree<'a> =
| Leaf 
| Node of Rec<'a>
type Rec}
和树

古斯塔沃的回答很好。请注意,如果为记录类型提供第二个参数,则可以将递归限制为
类型:

type Node<'a,'t> = { value : 'a; left : 't; right : 't }
type Tree<'a> = 
| Leaf
| Node of Node<'a,Tree<'a>>

let someTree = 
    Node { value = 1; 
           left = Leaf; 
           right = Node { value = 2; 
                          left = Leaf; 
                          right = Leaf }}
type Node={value:'a;left:'t;right:'t}

当你发现自己想说“奇怪”的时候,大多数时候你真正的意思是“我以前没见过这个”。想想看,这就是“奇怪”的技术定义,尽管它最近获得了更多的“错误”含义。谢谢,我不知道这里的“和”关键字。