(* An array library. *) module Array : sig exception ArrayIndex type `a array = `a Prim.Array.array val build : all `a. int -> (int -> `a) -> `a array val swap : all `a. `a array -> int -> `a -> `a val set : all `a. `a array -> int -> `a -> unit val size : all `a. `a array -> int (* Unlimited-only operations *) val new : all 'a. int -> 'a -> 'a array val get : all 'a. 'a array -> int -> 'a end = struct open Prim.Array exception ArrayIndex type `a array = `a Prim.Array.array let new (size : int) (elt : 'a) = build size (fun _ -> elt) let swap (a : `a array) (ix : int) (elt : `a) = try swap a ix elt with _ -> raise ArrayIndex let set (a : `a array) (ix : int) (elt : `a) = swap a ix elt; () end