     typealias DumpRuleClosure = (T) throws -> AnyObject
     typealias DumpOptionalRuleClosure = (T) throws -> AnyObject?
     
-    private var requirements = [String: RequirementClosure]()
-    
-    private var mandatoryRules = [String: RuleClosure]()
-    private var optionalRules = [String: RuleClosure]()
-    
-    private var mandatoryDumpRules = [String: DumpRuleClosure]()
-    private var optionalDumpRules = [String: DumpOptionalRuleClosure]()
+    private var requirements = [(String, RequirementClosure)]()
+    
+    private var mandatoryRules = [(String, RuleClosure)]()
+    private var optionalRules = [(String, RuleClosure)]()
+    
+    private var mandatoryDumpRules = [(String, DumpRuleClosure)]()
+    private var optionalDumpRules = [(String, DumpOptionalRuleClosure)]()
     
     private let factory: ()->RefT
     

     - returns: returns self for field declaration chaining
     */
    public func expect<R: Rule>(name: String, _ rule: R, _ bind: (RefT, R.V)->Void) -> Self {
        mandatoryRules[name] = storeRule(name, rule, bind)
        return self
    }


     - returns: returns self for field declaration chaining
     */
    public func optional<R: Rule>(name: String, _ rule: R, _ bind: ((RefT, R.V)->Void)? = nil, dump: (T)->R.V?) -> Self {
        optionalRules.append((name, storeRule(name, rule, bind)))
        optionalDumpRules.append((name, { struc in
            if let v = dump(struc) {
                return try rule.dump(v)
            }
            return nil
        }))
        return self
    }
    
