Tabulation boxes
type user = {
name : string;
age : int;
city : string;
}
let users =
[
{name = "Alice"; age = 20; city = "Paris"};
{name = "Bob"; age = 30; city = "London"};
]
let pp_users fmt list =
let open Format in
pp_open_tbox fmt ();
pp_set_tab fmt ();
fprintf fmt "%-7s" "Name";
pp_set_tab fmt ();
fprintf fmt "%-5s" "Age";
pp_set_tab fmt ();
fprintf fmt "%-5s" "City";
["-"; "-"; "-"]
|> List.iter (fun s ->
pp_print_tab fmt ();
pp_print_string fmt s);
List.iter
(fun p ->
pp_print_tab fmt ();
fprintf fmt "%s" p.name;
pp_print_tab fmt ();
fprintf fmt "%d" p.age;
pp_print_tab fmt ();
fprintf fmt "%s" p.city)
list;
for i = 0 to 10 do
pp_print_tab fmt ();
pp_print_int fmt i
done
let () = Format.printf "@[<v>%a@]@." pp_users users
(* do tables myself: *)
let () = print_newline ()
let pp_users fmt list =
let open Format in
fprintf fmt "@[<v>@[%10s%5s%10s@]@," "Name" "Age" "City";
List.iter (fun p -> fprintf fmt "@[%10s%5d%10s@]@," p.name p.age p.city) list;
fprintf fmt "@]"
let () = Format.printf "@[%a@]@." pp_users users
Output:
Name Age City
- - -
Alice 20 Paris
Bob 30 London
0 1 2
3 4 5
6 7 8
9 10
Name Age City
Alice 20 Paris
Bob 30 London