堆叠点符号需要什么类型?

What types are expected from stacked dot notation?

考虑:

#include "share/atspre_staload.hats"

fun plus_int_int(x: int, y: int): int = x + y

symintr .plus
overload .plus with plus_int_int

implement main0() =
        println!("4+4+4 = ", ((4).plus(4)).plus(4))

这行得通,很明显它不能是 4.plus(),因为 4. 被当作浮点数。我想知道的是,为什么 (4).plus(4).plus(4) 不起作用? ATS 发现第二个 .plus 没有有效的重载,这告诉我它期待 (int, int) -> int 以外的其他类型。它期待什么类型?

当前 ATS2 解析器解释

(4).plus(4).plus(4)

作为

((4).plus)((4).plus)(4)

我无法轻松修复解析器。我会在实现ATS3的时候考虑一​​下。