anchor.diff:  
   let rec qmap f l =
     match l with
  -    h::t -> let h' = f h and t' = qmap f t in
  -            if h' == h & t' == t then l else h'::t'
  +    h::t ->
  +        let h' = f h
  +        let t' = qmap f t in
  +        if h' == h && t' == t then l else h'::t'
     | _ -> l;;
   
   (* ------------------------------------------------------------------------- *)
  
positive.code: let rec mem x lis =
    match lis with
      [] -> false
    | (h::t) -> Pervasives.compare x h = 0 or mem x t;;
  
  let insert x l =
    if mem x l then l else x::l;;
  
negative.code: 
  let rec uniq l =
    match l with
    | x::(y::_ as t) -> let t' = uniq t in
                        if compare x y = 0 then t' else
                        if t'==t then l else x::t'
    | _ -> l;;
  
  (* ------------------------------------------------------------------------- *)
  (* Convert list into set by eliminating duplicates.                          *)
  (* ------------------------------------------------------------------------- *)
  
  let setify s = uniq (sort (fun x y -> compare x y <= 0) s);;
  
  (* ------------------------------------------------------------------------- *)
  (* String operations (surely there is a better way...)                       *)
  (* ------------------------------------------------------------------------- *)
  
  // OPTIMIZE : Make this an alias for List.sortWith.
  let implode l = itlist (^) l "";;
  
  let explode s =
  