 
 /// A single edit step.
 public enum EditStep<Value> {
-    case Insert(Int, Value)
-    case Substitute(Int, Value)
-    case Delete(Int)
+    case Insert(location: Int, value: Value)
+    case Substitute(location: Int, value: Value)
+    case Delete(location: Int)
 
     public var location: Int {
         switch self {

                matrix[i, j] = matrix[i - 1, j - 1]
            }
            else {
                let a = matrix[i - 1, j] + CollectionOfOne(.Delete(i - 1))
                let b = matrix[i, j - 1] + CollectionOfOne(.Insert(j - 1, destinationValue))
                let c = matrix[i - 1, j - 1] + CollectionOfOne(.Substitute(j - 1, destinationValue))
                matrix[i, j] = shortest(a, b, c)
            }
        }

        repeatedValue: [])

    for i in 1...source.count {
        matrix[i, 0] = (0...i).map({ .Delete(location: $0) })
    }

    for j in 1...destination.count {
        matrix[0, j] = (1...j).lazy.map({ $0 - 1 }).map({
            let destinationValue = destination[$0]
            return EditStep.Insert(location: $0, value: destinationValue)
        })
    }

