let parse_program tvl =
find1 `PG tvl "ID" >>= fun id ->
find01 `PG tvl "PN" >>= fun name ->
find01 `PG tvl "CL" >>= fun command_line ->
find01 `PG tvl "PP" >>= fun previous_id ->
find01 `PG tvl "DS" >>= fun description ->
find01 `PG tvl "VN" >>= fun version ->
assert_tags `PG tvl ["ID";"PN";"CL";"PP";"DS";"VN"] >>| fun () ->
{id; name; command_line; previous_id; description; version}