Вложенные универсальные типы интерфейсов
Учитывая следующий интерфейс:
type A<'t> =
abstract Scratch: 't
Как просто создать такой интерфейс:
type X<A<'t>> =
abstract f: A<'t>
Я также попробовал это:
type X<'t,'y when 'y:A<'t>> =
abstract f: 'y
и это:
type X<'t,A<'t>> =
abstract f: A<'t>
но никто не работает для меня.
1 ответ
Решение
Если вы хотите сделать это как интерфейс, попробуйте это:
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()
Если вы хотите абстрактные классы:
[<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'()