             }
         }
     }
-
+    
+    /**
+        Apply function wrapped in Result to Result-vrapped value
+    */
     public func apply<U>(transform: Result<V -> U>) -> Result<U> {
         switch self {
         case .Error(let error):

            }
        }
    }

    public static func pure(value: V) -> Result<V> {
        return .Value(value)
    }
}

public func pure<V>(value: V) -> Result<V> {
    return Result<V>.pure(value)
}

precedence 100
}

/**
    If there's no error, perform function that may yield Result with value and return wrapped result
    Left associative
*/
public func >>- <V, U>(result: Result<V>, transform: V -> Result<U>) -> Result<U> {
    return result.flatMap(transform)
}
