 }
 
 public protocol Flattenable {
-    func flatten() -> Self    
+    func flatten() -> Self
 }
 
 extension Flattenable where Self: SequenceType {

    
}

extension SequenceType where Generator.Element : Comparable {

    public func min(fallbackValue: Self.Generator.Element) -> Self.Generator.Element {
        guard let result = self.minElement() else {
            return fallbackValue
        }
        return result
    }

    public func max(fallbackValue: Self.Generator.Element) -> Self.Generator.Element {
        guard let result = self.maxElement() else {
            return fallbackValue

        return result.count > 0
    }
    
    public func groupBy<U>(@noescape filterFunc: (Generator.Element) -> U) -> [U : PartitionSequence<Generator.Element>] {
        var result = [U: Set<Generator.Element>]()
        for i in self {
            let u = filterFunc(i)
