let intersection l1 l2 =
  it_list (fun l x -> if List.mem x l2 then x::l else l) [] l1