types - 不可能用递归类型约束创建对象?

标签 types f# type-constraints recursive-type

这是一个纯粹的学术问题,但来自 this question
关于类型约束。提问者举了一个例子:

type Something<'a, 'b when 'b :> seq<'b>>() =
    member __.x = 42

f# 愉快地编译。现在的问题是你如何制作这个对象?
let z = new Something<???, ???>()

最佳答案

type T() =
    interface seq<T> with
        member this.GetEnumerator() = ([] :> seq<T>).GetEnumerator()
        member this.GetEnumerator() = ([] :> seq<T>).GetEnumerator() :> System.Collections.IEnumerator

let z = new Something<string, T>()

关于types - 不可能用递归类型约束创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37578528/

相关文章:

vb6 - 为什么我的 VB6 变体会根据分配时间而变化?

f# - F# 中的字符值

f# - 给定真值表需要创建二叉树的帮助

c# - 为通用参数指定构造函数约束

c++ - typedef 函数不是类型名?

typescript - 条件类型的尾递归消除不起作用

F# 类型提供程序 - 嵌套属性实例化

swift - Swift 的广义类型约束

interface - 具有类型约束的接口(interface)方法的 F# 实现

c++ - C++ 中的引用是如何编码的?