当我被提起F#似乎不支持Infinite Types时,我在Twitter上与Sadek Drobi聊天。事实证明,在C#中,您可以按照以下方式进行操作:

delegate RecDelegate<T> RecDelegate<T>(T x);

但是,在我们对这两个部分进行了一些试验之后,我们确定F#中的隐式和显式都似乎不可能。

明确:
type 'a specialF = 'a->specialF<'a>



隐式:
let rec specialF (x: 'a) = specialF



当然,这些是有意的简单示例。

我想知道我是否误会了。也许我错过了某种类型的必要注释?

最佳答案

您也可以做类似的事情

type 'a RecType = RecType of ('a -> 'a RecType)

创建通过其执行递归的命名类型。现在这有效:
let rec specialF = RecType (fun _ -> specialF)

关于f# - F#中不可能使用无限类型(又称为递归类型)吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1228644/

10-10 17:08