有趣的是operator precedence as defined for symbolic methods似乎不適用於符號類型別名。相反,中綴類型別名總是評估左結合:
type -[A,B] = Map[A,B]
type /[A,B] = Map[A,B] // '/' has higher precedence than '-' as an operator
classOf[A - B/C] // Class[/[-[A,B],C]]
classOf[A/B - C] // Class[-[/[A,B],C]]
不幸的是,這意味着它永遠不可能做到你要求沒有這樣的括號什麼:
classOf[A - (B/C)] // Class[-[A,/[B,C]]
所以最接近的答案如下:
type ~>[A,B] = Map[A,B]
type ~~~>[A,B] = Pair[A,B]
classOf[A ~> (B ~~~> C)] // Map[A,Pair[B,C]]
Ommitting括號,如果你使用正確的關聯別名(與:
結尾)只可能
type ~:[A,B] = Map[A,B]
type ~~~:[A,B] = Pair[A,B]
classOf[A ~: B ~~~: C] // Map[A,Pair[B,C]]
而且,不幸的是,因爲所有類型的別名具有相同的優先級,不可能不帶括號混合左,右關聯的別名。
關於你的問題的第二部分:(A,B,C)
是Tuple3[A,B,C]
的語法糖,它是一個有三個參數的類型。因爲中綴類型只有兩個參數,恐怕我認爲沒有辦法用中綴類型來表示這種類型。你將永遠結束了兩個嵌套的參數類型(例如(A,(B,C))
或((A,B),C)
。
很好的說明。直到你的答案沒有意識到優先級不一樣! –
是否有可能實現'A作爲B〜> C'來表示'(A,B ,C)'? – pathikrit
@wrick:我不相信這是可能的在類型層面上。中綴類型只能使用兩個類型參數,但(A,B,C)有三個。只有((A,B),C)或(A,(B,C))是可能的。 –