let is_bibtexable (set:set) : [ `yes | `no of (entry list)] =
let has_bibtex =
Ls.exists ~f:(function `bibtex _ -> true | _ -> false) in
let is_miscable e =
(Ls.exists (function `id _ -> true | _ -> false) e) &&
(Ls.exists (function `title _ -> true | _ -> false) e) &&
(* (Ls.exists (function `authors _ -> true | _ -> false) e) && *)
(Ls.exists (function `how _ -> true | _ -> false) e)
(* (Ls.exists (function `year _ -> true | _ -> false) e) *)
in
let invalids =
Ls.find_all
(fun entry -> not ((has_bibtex entry) || (is_miscable entry)))
set in
match invalids with
| [] -> `yes
| l -> `no l