type Accumulator[Self] = (Self <: Accumulator[Self]) & { member add : Int -> Self } type MyAccum = { member add : Int -> MyAccum } assert MyAccum <: Accumulator[MyAccum] type Acchmmmmulator[Self] = (Self <: Acchmmmmulator[Self]) => { member add : Int -> Self }