Generics 在受歧视的联合上实现与另一接口的成员的接口

Generics 在受歧视的联合上实现与另一接口的成员的接口,generics,interface,f#,f#-argu,Generics,Interface,F#,F# Argu,我正在使用Argu解析cli参数。我注意到我需要为两件不同的事情提供相同的论据。我希望使用相同的类型,并且只更改接口实现(我的参数discriminatedunion上的IArgParserTemplate) 大致如下: type IArgumentDescription = abstract member FirstDescription: string type ImportArguments = interface IArgumentDescription with

我正在使用Argu解析cli参数。我注意到我需要为两件不同的事情提供相同的论据。我希望使用相同的类型,并且只更改接口实现(我的参数discriminatedunion上的IArgParserTemplate)

大致如下:

type IArgumentDescription =
     abstract member FirstDescription: string

type ImportArguments =
    interface IArgumentDescription with
        member this.FirstDescription = "Import Description"

type ExportArguments =
    interface IArgumentDescription with
        member this.FirstDescription = "Export Description"

type Arguments<'T when 'T :> IArgumentDescription> = | FirstArgument of string
with 
    interface IArgParserTemplate with
        member this.Usage =
            match this with
            | FirstArgument _ -> ? (Here I would like to use the 'T.FirstDescription of the IArgumentDescription Interface. (this:>IArgumentDescription).FirstDescription does not work.)
类型IArgumentDescription=
抽象成员描述:字符串
类型导入=
IArgumentDescription与的接口
成员this.FirstDescription=“导入说明”
输入ExportArguments=
IArgumentDescription与的接口
成员this.FirstDescription=“导出说明”
类型参数IArgumentDescription>=|字符串的第一个参数
具有
IArgParserTemplate与的接口
请记住这个用法=
与此匹配
|第一个参数-->?(这里我想使用IArgumentDescription接口的'T.FirstDescription.。(此:>IArgumentDescription)。FirstDescription不起作用。)

这在FSharp中可能吗?如果可能,正确的语法是什么?

我想不出一个好方法来做到这一点,因为你不能真正地参数化或“子类化”一个有区别的联合。您可以使用一种涉及反射的有点脏的hack,但我不确定这是否可取(就像生产代码中与反射相关的大多数事情一样)

类型IArgParserTemplate=
抽象成员用法:string
类型描述=
抽象成员描述:字符串
//括号对于使其成为类而不是接口很重要
类型ImportArguments()=
IArgumentDescription与的接口
成员this.FirstDescription=“导入说明”
//括号对于使其成为类而不是接口很重要
类型ExportArguments()=
IArgumentDescription与的接口
成员this.FirstDescription=“导出说明”
类型参数IArgumentDescription>=|字符串的第一个参数
具有
IArgParserTemplate与的接口
请记住这个用法=
//这是您的'T'实例

让instance=Activator.createInstance您没有可以使用其
FirstDescription
成员的
't
实例。但是
这不是
类型参数的
吗?是的。但是
IArgumentDescription
只是一个类型参数;它不是通过这种类型实现的。由于DU也不支持对象表达式,有没有其他方法实现类似的内容?您认为保持它的显式是更好的方法?有两个单独的参数类型分别实现描述?结果表明Argu根本不支持通用DU,所以所有这些都是哑的。谢谢你@TeaDrivenDev