             }
     }
 
+    /// Creates `DataFlowProcedure` with `dataLoadingProcedure`, `deserializationProcedure`, `resultMappingProcedure`.
+    ///
+    /// Result of `deserializationProcedure` is passed to `resultMappingProcedure`
     public convenience init<L: Procedure, D: Procedure, M: Procedure>(dataLoadingProcedure: L, deserializationProcedure: D,
                      resultMappingProcedure: M) where L: OutputProcedure, L.Output == Data,
         D: InputProcedure & OutputProcedure, D.Input == Data, D.Output == Any,


import ProcedureKit

open class DataFlowProcedure<Result>: GroupProcedure, OutputProcedure {
    public var output: Pending<ProcedureResult<Result>>

    public init<L: Procedure, D: Procedure, I: Procedure, M: Procedure>(dataLoadingProcedure: L, deserializationProcedure: D, interceptionProcedure: I, resultMappingProcedure: M) where L: OutputProcedure, L.Output == Data,
        D: InputProcedure & OutputProcedure, D.Input == Data, D.Output == Any,
        I: InputProcedure & OutputProcedure, I.Input == Any, I.Output == Any,

                      resultMappingProcedure: resultMappingProcedure)
    }


    /// - returns: Interception procedure that does not change input value
    static func createEmptyInterceptionProcedure() -> TransformProcedure<Any, Any> {
        return TransformProcedure {$0}
    }
