let rec split = function
  lxy -> if is_empty_list (lxy)
           then (empty_list (), empty_list ())     (* ----- (lxy, lxy) : type error ----- *)
           else let
                  (x, y) = head (lxy)
                and
                  (lx, ly) = split (tail (lxy))
                in
                  (cons_list (x, lx), cons_list (y, ly))