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

    /// - Parameter work: Block of work with error
    /// - Returns: ALEither<R, E>
    @discardableResult
    func doIfWrong(if predicate: (E) -> Bool, work: (E) -> Void) -> ALEither<R, E> {
        if case .wrong(let err) = self {
            work(err)
        }
        return self
    }
    
    func fork(right: ((R)->Void)?, wrong: ((E) -> Void)?) {
        switch self {
            case let .right(val): right?(val)
            case let .wrong(val): wrong?(val)

    ///
    /// - Parameter value: Default value
    /// - Returns: ALEither<Right>
    public func drive(value: R) -> ALEither<R, E> {
        if case .wrong = self {
            return .right(value: value)
        }
