let array_fold2 (_func: '-> '-> '-> 'a) (_acc: 'a) (_array1: 'b array) (_array2: 'c array) : 'a =

  let rec fold_at (index: int) (acc: 'a) : 'a =
    if index >= Array.length _array1 then begin
      acc
    end
    else begin
      let new_acc =
        _func acc _array1.(index) _array2.(index)
      in
        fold_at (index + 1) new_acc
    end
  in


    if Array.length _array1 <> Array.length _array2 then begin
      raise Exit
    end
    else begin
      fold_at 0 _acc
    end