      - returns: returns self for field declaration chaining
      */
     public func expect<R: Rule>(name: String, _ rule: R, _ bind: ((RefT, R.V)->Void)? = nil, dump: (T)->R.V) -> Self {
-        mandatoryRules[name] = storeRule(name, rule, bind)
-        mandatoryDumpRules[name] = { struc in
-            return try rule.dump(dump(struc))
-        }
+        mandatoryRules.append((name, storeRule(name, rule, bind)))
+        mandatoryDumpRules.append((name, { struc in return try rule.dump(dump(struc)) }))
         return self
     }
     

     - 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
    }
    
