Единственное место, которое сообщает компилятору F # о типе параметра, находится внутри лямбда-функции, заданной для Array.iter
(при использовании этой функции более высокого порядка компилятор делает вывод, что вы работаете с массивами) , Внутри лямбда-функции у вас есть:
leafNodes.[(int)b]
Как примечание, int
в этом коде - это просто обычная функция F # (не специальная конструкция приведения типа), поэтому обычный способ написать ее будет просто:
leafNodes.[int b]
Теперь компилятор знает, что b
(то есть значения массива, заданного в качестве аргумента) можно преобразовать в целое число, однако функция int
работает с другими типами (вы можете написать, например, int 3.13f
В неоднозначных случаях, подобных этому, компилятор использует int
в качестве типа по умолчанию, поэтому по этой причине вы видите тип int[]
.
Вы можете добавить аннотации типов в объявление следующим образом (и оно будет работать без каких-либо других изменений, поскольку byte
можно преобразовать в целое число с помощью функции int
):
let createNodes (inputValues:byte[]) =
// ...