小编Lel*_*tch的帖子

f#类型提供者继承

我设计了一个简单的类型提供程序,它根据我的参数提供类型.我想知道是否可以定义将继承另一个ProvideTypeDefinition的ProvidedTypeDefinitions?

我知道我可以做以下事情:

type People() = class end

type Student() =
    inherit People() 

type Teacher() =
    inherit People()
Run Code Online (Sandbox Code Playgroud)

然后我可以使用Type Test Pattern进行模式匹配:

let f (x:People) =
    match x with
        | :? Student -> "Student"
        | :? Teacher -> "Teacher"
        | _ -> "Nothing !!"
Run Code Online (Sandbox Code Playgroud)

我想在我的Type提供程序中做的是创建继承另一个ProvideTypeDefinition的ProvidedTypeDefinitions.这样当我使用类型提供程序生成这些类型时,我可以对它们进行模式匹配(例如,我知道在运行时,其中一种类型将被实例化,但我不知道哪一种除了它是ProvideTypeDefinitions之一).

感谢您的时间!

inheritance f# type-providers

8
推荐指数
1
解决办法
168
查看次数

使用Reflection.Emit生成有区别的联合

我想知道是否有可能在f#中使用Reflection.emit(或其他任何东西)生成DU,或者甚至在已经定义的DU中添加新的情况.

我一直在寻找msdn网站,我发现我所能做的就是获得工会案件或创建工会案件.通过使用FSharpValue.MakeUnion或使用引号Expr.NewUnionCase来创建它们.

我使用这种方法的问题是我如何能够以这样的方式绑定它们,即我所做的联合案例属于同一个DU?也许这不是解决这个问题的方法.在那种情况下,我将如何动态生成DU?

PS:目标是在Type提供程序中生成DU .这意味着,如果我没有错,那么当编译成.dll文件时,我将能够访问脚本文件中由TypeProvider生成的DU .这意味着我将能够在DU的实例上应用模式匹配,并且还获得DU提供的类型安全性(例如,模式匹配中的所有情况的详尽性).

reflection f# reflection.emit discriminated-union type-providers

2
推荐指数
1
解决办法
207
查看次数