sig
  type wall_types = WALL | FLOOR
  type t = PathVisual.Cave.wall_types array array
  val make : int -> int -> PathVisual.Cave.t
  val makeinit :
    int -> int -> PathVisual.Cave.wall_types -> PathVisual.Cave.t
  val iter :
    (PathVisual.Cave.wall_types -> unit) ->
    (unit -> unit) -> PathVisual.Cave.t -> unit
  val map :
    (PathVisual.Cave.wall_types -> 'a) -> PathVisual.Cave.t -> 'a array array
  val copy : PathVisual.Cave.t -> PathVisual.Cave.t
  val set :
    PathVisual.Cave.t -> int -> int -> PathVisual.Cave.wall_types -> unit
  val fold_right :
    (PathVisual.Cave.wall_types -> '-> 'a) ->
    ('-> '-> 'a) -> PathVisual.Cave.t -> '-> 'a
  val mapi :
    (int -> int -> PathVisual.Cave.wall_types -> 'a) ->
    PathVisual.Cave.t -> 'a array array
  val string_of_wall : PathVisual.Cave.wall_types -> string
  val string_of_cave : PathVisual.Cave.t -> string
  val print : PathVisual.Cave.t -> unit
  val get : PathVisual.Cave.t -> int -> int -> PathVisual.Cave.wall_types
  val is_valid_coor : PathVisual.Cave.t -> int -> int -> bool
  val wall_neighbours : PathVisual.Cave.t -> int -> int -> int
  val caveify : PathVisual.Cave.t -> int -> PathVisual.Cave.t
  val neighbour_coords' : int * int -> (int * int) list
  val neighbour_coords : int * int -> (int * int) list
  val inrangexy : PathVisual.Cave.t -> int -> int -> bool
  val isfloor : PathVisual.Cave.t -> int -> int -> bool
  val getvalidxy : PathVisual.Cave.t -> int * int
  val intpairset_neighbours :
    PathVisual.Cave.t -> PathVisual.IntPairSet.t -> PathVisual.IntPairSet.t
  val connected :
    PathVisual.Cave.t -> PathVisual.IntPairSet.t -> PathVisual.IntPairSet.t
  val find_unconnected :
    PathVisual.Cave.t -> PathVisual.IntPairSet.t -> int * int
  val find_connected :
    PathVisual.Cave.t -> int * int -> PathVisual.IntPairSet.t -> int * int
  val dig_tunnel :
    PathVisual.Cave.t -> int * int -> int * int -> PathVisual.Cave.t
  val connect_cave' :
    PathVisual.Cave.t ->
    int * int -> PathVisual.IntPairSet.t -> PathVisual.Cave.t
  val connect_cave : PathVisual.Cave.t -> PathVisual.Cave.t
  val makecave1 : int -> int -> int -> PathVisual.Cave.wall_types array array
  val makecave2 : int -> int -> PathVisual.Cave.t
  val makecave3 : int -> int -> PathVisual.Cave.t
  val cave0 : PathVisual.Cave.wall_types array array
  val cave1 : PathVisual.Cave.wall_types array array
  val cave2 : PathVisual.Cave.wall_types array array
end