             }
         }
 
-        return ValueReader(input: self.inputForReader, convert: convert)
-    }
-
-    func asBool() -> ValueReader<String, Bool> {
+        return ConversionStep(input: self.inputForReader, convert: convert)
+    }
+
+    func asBool() -> ConversionStep<String, Bool> {
         func convert(s: String, ov: OriginalValue) -> ConversionResult<Bool, ExtractError> {
             let bval = (s as NSString).boolValue
             return .Success(bval)
         }
 
-        return ValueReader(input: self.inputForReader, convert: convert)
-    }
-}
+        return ConversionStep(input: self.inputForReader, convert: convert)
+    }
+}

    func readValue() -> ConversionContext<Output, ExtractError>
}

extension VRP where Output == Int {
    func range(r: Range<Int>) -> ValueReader<Int, Int> {
        func input() -> ConversionContext<Int, ExtractError> {
            return self.readValue()
        }

    let result: ConversionResult<T, Error>
}

struct ConversionStep<Input, Output>: ConversionStepProtocol {
    let input: () -> ConversionContext<Input, ExtractError>
    let convert: (Input, OriginalValue) -> ConversionResult<Output, ExtractError>

