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)
但没有一个对我有用.
如果你想这样做接口尝试这个:
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)