Пока вы ничего не добавите в массив, тип не определен полностью. Это отражено в типе, указанном для массива:
val a : '_a zapis array = [|Prazen; Prazen; Prazen; Prazen; Prazen|]
Если вы посмотрите внимательно, то увидите, что 'a
, который вы указали в качестве параметра типа, стал '_a
(обратите внимание на _
). Этот тип означает «некоторый тип, но я еще не знаю, какой». В отличие от 'a
, что означает любой тип.
Это означает, что на данный момент вы можете вставить любой вид Zapis. Как только вы это сделаете, вы можете вставить Zapis только этого специального типа (в следующих типах '_a
исчезает и заменяется на правильный тип).
Так что, если вы делаете
a.(0) <- Zapis ("z", 10)
a
станет int zapis array
и будет принимать только целые числа с этого момента.
если вы делаете вместо
a.(0) <- Zapis ("z","z")
он станет string zapis array
только после того, как принимает строки.