【发布时间】:2009-08-04 16:48:00
【问题描述】:
当我在 Twitter 上与 Sadek Drobi 聊天时,我被告知 F# 似乎不支持无限类型。事实证明,在 C# 中,您可以按照以下方式进行操作:
delegate RecDelegate<T> RecDelegate<T>(T x);
但是,在我们对这两个部分进行了一些实验之后,我们确定在 F# 中,无论是隐式还是显式,都似乎不可能。
显式:
type 'a specialF = 'a->specialF<'a>
错误 FS0191:此类型定义 涉及立即循环引用 通过缩写,结构字段 或继承关系。
隐式:
let rec specialF (x: 'a) = specialF
类型不匹配。期待一个'b但是 给定一个'a->'b。结果类型 统一''b'时将是无限的 和''a -> 'b'。
当然,这些都是故意简单的示例。
我想知道我是不是弄错了。也许我错过了某种必要的注释?
【问题讨论】:
-
这里有实际应用吗,还是这个问题只是为了好玩而调查的结果?
-
据我了解,没有实用的引用透明应用程序。然而,一个例子是,对于某种封闭的可变状态,这对于重复应用很有用。例如:add(1)(2)(3)(4) -- 可以完成任意数量的应用程序。
-
这是我编写的一个 OCaml 程序,它使用此功能来避免使用 rectypes 的间接级别。 ffconsultancy.com/languages/ray_tracer/code/1/ray.ml
标签: f# types type-inference