Arrays and Plate

Hakaru provides special syntax for arrays, which is distinct from the other data types.


To construct arrays, we provide an index variable, size argument, and an expression body. This body is evaluated for each index of the array. For example, to construct the array [0,1,2,3]:

array i of 4: i

Array Literals

We can also create arrays using the literal syntax a comma delimited list surrounded by brackets: [0,1,2,3]

Array size and indexing

If a is an array, then size(a) is its number of elements, which is a nat. If i is a nat then a[i] is the element of a at index i. Indices start at zero, so the maximum valid value of i is size(a)-1.


Beyond, arrays Hakaru includes special syntax for describing measures over arrays called plate. Plate using the same syntax as array but the body must have a measure type. It returns a measure over arrays. For example, if we wish to have a distribution over three independent normal distributions we would do so as follows:

plate _ of 3: normal(0,1)