let compare a b =
    let c = Typ.compare a.arr_element b.arr_element in
    if c <> 0 then c
    else match a.arr_flat , b.arr_flat with
        | Some a , Some b -> Int64.compare a.arr_size b.arr_size
        | None , Some _ -> (-1)
        | Some _ , None -> 1
        | None , None -> 0