let filter (l:('a,'b) t) f = let rec filter_rec l = match l with | [] -> [] | x::c -> if (f x) then x::(filter_rec c) else (filter_rec c) in filter_rec !l