嵌套通用类型的接口

Moh*_*sen 3 generics f# nested-generics

给出以下界面:

type A<'t> =
    abstract Scratch: 't
Run Code Online (Sandbox Code Playgroud)

如何简单地创建这样的界面:

type X<A<'t>> =
    abstract f: A<'t>
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

type X<'t,'y when 'y:A<'t>> =
    abstract f: 'y
Run Code Online (Sandbox Code Playgroud)

还有这个:

type X<'t,A<'t>> =
    abstract f: A<'t>
Run Code Online (Sandbox Code Playgroud)

但没有一个对我有用.

Sze*_*zer 5

如果你想这样做接口尝试这个:

type IA<'a> =
    abstract Scratch: 'a

type IX<'a, 'b when 'a :> IA<'b>> = 
    abstract F: 'a

type RealA() = 
    interface IA<int> with
        member __.Scratch = 1

type RealX = 
    interface IX<RealA, int> with
        member __.F = RealA()
Run Code Online (Sandbox Code Playgroud)

如果你想要抽象类:

[<AbstractClass>]
type A<'a>() = 
    abstract member Scratch: 'a

[<AbstractClass>]
type X<'a, 'b when 'a :> A<'b>>() = 
    abstract F: 'a

type RealA'() = 
    inherit A<int>()
    override __.Scratch = 1

type RealX'() = 
    inherit X<RealA', int>()
    override __.F = RealA'()
Run Code Online (Sandbox Code Playgroud)