let remove_first filter = let rec aux acc = function | [] -> assert false | hd::tl -> if filter hd then (hd,List.rev_append acc tl) else aux (hd::acc) tl in aux []