anchor.diff:          member x.concat xs = concat distance xs
           member x.append t1 t2 = x.concat [t1; t2]
           member x.delete a tree = delete distance a tree
  +        member x.ofSeq xs = ofSeq distance xs
  +        member x.ofArray xs = ofArray distance xs
   
       let private hirschberg xs = function
           | [] -> List.length xs
  
positive.code:         | Node(a, _ , d) ->
              a :: (d |> Map.valueList |> List.collect toList)
  
      let rec private toListDistance distance n a = function
          | Empty -> []
          | Node(b, _, dict) ->
  
negative.code:             |> List.collect (toListDistance distance n a)
              |> if d <= n then List.cons b else id
  
      let private ofCollection pred distance xs = xs |> pred (flip (add distance)) empty
  
      let private ofList distance xs = ofCollection List.fold distance xs
  
      let private ofSeq distance xs = ofCollection Seq.fold distance xs
  
      let private ofArray distance xs = ofCollection Array.fold distance xs
  
      let private concat distance xs = xs |> List.collect toList |> ofList distance
  
  