Существует ли язык, в котором переменные внутри функции набираются, а тип параметров определяется? - PullRequest
0 голосов
/ 08 февраля 2020

Что-то, что я вижу на нескольких языках, это вывод типа, скажем, в Scala, что я пишу

val x = 3

Затем вывод x имеет тип Int, это довольно круто, другой пример, возможно, у меня есть ситуация, подобная

class Hi {
  val f = (x: Int) => "Hi"
}

. Затем выводится, что f имеет тип Int => String.

Что меня интересует, так это обратное, данное (недопустимое )

val f = x => x.Hi(7): String

Имеет смысл сказать, что тип x имеет вид

{
  Hi: 7 => String
}

Под этим подразумевается, что x - это любой объект со свойством Привет, который отображает 'type' 7 в строку.

Мне очень нравится это как идея, потому что он автоматически делает сигнатуру моей функции как generi c, поскольку это может быть дано для ее реализации.

В общем, я могу себе представить, что у меня есть некоторая функция f, скажем, параметр x, x используется в различных местах в теле f, как, может быть, у меня есть

g(x.blah(3))

Где g имеет введите X => число, где выводится X (по определению g), тогда хорошо, я просто записываю что у типа x должно быть свойство с именем blah типа 3 => X.

Имеет ли это смысл? Есть ли язык программирования с такой системой типов?

Когда я пишу Java, я чувствую, что иногда я определяю свои методы на каком-то интерфейсе, но на самом деле метод не требует всех свойств интерфейса, просто я не Я не хочу определять интерфейс для каждого метода (и мне нужно сделать соответствующую реализацию), но при этом я делаю метод менее обобщенным c, чем могло бы быть.

...