В таких языках, как SML, Erlang и в buch других, мы можем определить такие функции:
fun reverse [] = []
| reverse x :: xs = reverse xs @ [x];
Я знаю, что мы можем написать аналог в Scala, как это (и я знаю, что есть много недостатков в коде ниже):
def reverse[T](lst: List[T]): List[T] = lst match {
case Nil => Nil
case x :: xs => reverse(xs) ++ List(x)
}
Но мне интересно, если бы мы могли написать прежний код в Scala, возможно, с desugaring к последнему.
Существуют ли какие-либо фундаментальные ограничения для такого синтаксиса, которые будут реализованы в будущем (я имею в виду, действительно фундаментальный - например, как вывод типа работает в Scala или что-то еще, за исключением парсера, очевидно)?
UPD
Вот фрагмент того, как он может выглядеть:
type T
def reverse(Nil: List[T]) = Nil
def reverse(x :: xs: List[T]): List[T] = reverse(xs) ++ List(x)