Какие типы ожидаются от многоточечной нотации?

Рассматривать:

#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, Какой тип это ожидает?

1 ответ

Решение

Текущий синтаксический анализатор ATS2 интерпретирует

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

как

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

Я не могу легко исправить парсер. Я подумаю об этом при реализации ATS3.

Другие вопросы по тегам