投影類型

badge

投影類型表示如下代碼中的"Self.AddO"等類型

Add R = Trait {
    . `_+_` = Self, R -> Self.AddO
    .AddO = Type
}

AddForInt = Patch(Int, Impl := Add Int)
AddForInt.
    AddO = Int

類型"Add(R)"可以說是定義了與某個對象的加法的類型。由于方法應該是一個類型屬性,+ 類型聲明應該寫在縮進下面 Add 類型的場景是聲明 .AddO = Type,而 .AddO 類型的實體是一個投影類型,由一個作為 子類型的類型持有 添加。例如,Int.AddO = IntOdd.AddO = Even

assert Int < Add
assert Int.AddO == Int
assert Odd < Add
assert Odd.AddO == Even