 
 public extension Optional {
 
+    @warn_unused_result
     func filter(@noescape predicate: Wrapped -> Bool) -> Optional {
 
         return map(predicate) == .Some(true) ? self : .None
     }
 
+    @warn_unused_result
     func replaceNil(with replacement: Wrapped) -> Optional {
 
         return self ?? replacement

        if let wrapped = self { f(wrapped) }
    }

    func onSome(@noescape f: Wrapped -> Void) -> Optional {

        then(f)
        return self
    }

    func onNone(@noescape f: Void -> Void) -> Optional {

        if isNone { f() }

        return self != nil
    }

        var isNone: Bool {

        return !isSome
    }
