             // TODO: resolve custom types
             //            parser.resolve(AnyClass.self, name: self.rawValue)
             
-            let nodeTuple = nodeParser(container: container, node: child, key: key, options: options)
+            let (nodeResult, klass, meta) = nodeParser(container: container, node: child, key: key, options: options)
+//            let klass: AnyClass = meta["klass"]!
+            let finalResult = nodeResult as klass
+            
             
             // TODO: use options to set ObjectScope (default to .Container?)
             

import Swinject
import ModelIO

public typealias SpectraXMLNodeTuple = (construct: Any, meta: [String: Any]?)
// meta is used when the construct returns a monad
// meta should include a function at key: resolve
// - the function should be expected to receive itself as args

    
    public func nodeParser(node: XMLElement, key: String, options: [String:Any] = [:]) -> SpectraXMLNodeParser? {
        
        switch self {
        case .World:
            return {(container, node, key, options) in
