sig
  type column = {
    title : string;
    length : int;
    rows : int -> Bogue.Layout.t;
    compare : (int -> int -> int) option;
    width : int option;
  }
  type t
  val create :
    ?w:int ->
    h:int ->
    ?row_height:int ->
    ?name:string ->
    Bogue.Table.column list ->
    Bogue.Layout.t * (Bogue.Selection.t, Bogue.Selection.t) Bogue.Tvar.t
  val of_array :
    ?w:int ->
    h:int ->
    ?widths:int option list ->
    ?row_height:int ->
    ?name:string ->
    string list ->
    string array array ->
    Bogue.Layout.t * (Bogue.Selection.t, Bogue.Selection.t) Bogue.Tvar.t
  val of_list :
    ?w:int ->
    h:int ->
    ?widths:int option list ->
    ?row_height:int ->
    ?name:string ->
    string list list ->
    Bogue.Layout.t * (Bogue.Selection.t, Bogue.Selection.t) Bogue.Tvar.t
end