     }
 }
 
-func +<T> (left: Diff<T>, right: DiffStep<T>) -> Diff<T> {
+public func +<T> (left: Diff<T>, right: DiffStep<T>) -> Diff<T> {
     return Diff<T>(results: left.results + [right])
 }
 

            return i
        }
    }
    var value: T {
        switch(self) {
        case .Insert(let j):
            return j.1

//

public struct Diff<T> {
    public let results: [DiffStep<T>]
    public var insertions: [DiffStep<T>] {
        return results.filter({ $0.isInsertion }).sort { $0.idx < $1.idx }
    }
    public var deletions: [DiffStep<T>] {
        return results.filter({ !$0.isInsertion }).sort { $0.idx > $1.idx }
    }
    public func reversed() -> Diff<T> {
        let reversedResults = self.results.reverse().map { (result: DiffStep<T>) -> DiffStep<T> in
            switch result {
            case .Insert(let i, let j):
