И опять, это означает, что вы не выводите тип параметра по употреблению (хотя это возможно), а на этот раз требуете этой аннотации от программиста (и чем это отличается от явной типизации?).
Предполагалось задавать порядок следования элементов в структуре, хотя может вы и правы.
… а как вы определяете, каких типов x и y? Опять подстановкой при вызове?
Их типы задаются при первой инициализации структуры.
a-числовой, b-строковый тип. Если для таких a и b определён оператор >, то возвращаемое значение функции a будет того же типа, что и возвращаемое значение оператора >.
fun f (a, b) = if a > b then a.x else b.y
Здесь ошибка, поскольку в аргументах не обозначено, что переменная a включает в себя переменную x, b, соответственно, y.
Если было бы обозначено, и функция возвращала значения разных типов(типы переменных x и y), то была бы ошибка компиляции.
Аргументы выводятся при каждом вызове функции. Тип возвращаемого значения выводится в теле самой функции. Если возвращаемых значений 2 и более — ошибка компиляции.
В этом случае функция не нужна.
Предполагалось задавать порядок следования элементов в структуре, хотя может вы и правы.
Их типы задаются при первой инициализации структуры.
При таком вызове функции:
a-числовой, b-строковый тип. Если для таких a и b определён оператор >, то возвращаемое значение функции a будет того же типа, что и возвращаемое значение оператора >.
Здесь ошибка, поскольку в аргументах не обозначено, что переменная a включает в себя переменную x, b, соответственно, y.
Если было бы обозначено, и функция возвращала значения разных типов(типы переменных x и y), то была бы ошибка компиляции.
В простом массиве все данные одного типа.
В гетерогенный вложены.
Тип выводиться в теле функции.