     /// - Parameter predicate: Predicate
     /// - Returns: ALEither<R, E>?
     
-    func take(if predicate: (R) -> Bool) -> ALEither<R, E>? {
+    public func take(if predicate: (R) -> Bool) -> ALEither<R, E>? {
         switch self {
             case .right(let val): return predicate(val) ? self : nil
             case .wrong: return self

    case right(value: R)
    case wrong(value: E)
    
    init(value: R) {
        self = .right(value: value)
    }
    
    init(wrong: E) {
        self = .wrong(value: wrong)
    }
    
    init?(value: R?, error: E?) {
        if let e = error {
            self = .wrong(value: e)
            return

    /// - Parameter work: Block of work with error
    /// - Returns: ALEither<R, E>
    @discardableResult
    public func doIfWrong(on queue: DispatchQueue? = nil, work: @escaping  (E) -> Void) -> ALEither<R, E> {
        if case .wrong(let err) = self {
            performWork(onQueue: queue, work: { work(err) })
            
