code: function createFactory(viewSpecifier, viewName) {
  	return function() {
  		var props = {}
  		var children = []
  		each(arguments, function processArg(val) {
  			if (val === undefined || val === null || val === true || val === false) {
  				return
  				
  			} else if (_isReactObj(val)) {
  				children.push(val)
  				
  			} else if (val._isTagsStyleSheet) {
  				if (!props.style) {
  					props.style = [val._tagsStyleSheetId]
  				} else if (!isArray(props.style)) {
  					throw new Error('Cannot use both tags.Style and tags.StyleSheet on the same element')
  				} else {
  					props.style.push(val._tagsStyleSheetId)
  				}
  				
  			} else if (val._isTagsStyleVal) {
  				if (!props.style) {
  					props.style = val._tagsStyleVal
  				} else if (!isObject(props.style)) {
  					throw new Error('Cannot use both tags.StyleSheet and tags.Style on the same element')
  				} else {
  					assign(props.style, val._tagsStyleVal)
  				}
  				
  			} else if (isFunction(val)) {
  				processArg(val(props, children))
  				
  			} else if (isArray(val) || isArguments(val)) {
  				each(val, processArg)
  				
  			} else if (isObject(val)) {
  				if (val.style && props.style) {
  					throw new Error("Cannot use multiple style properties on the same element")
  				} else if (val.__value) {
  					// TODO: expose canonical way for autoreact to play well with tags.js
  					processArg(val.__value)
  				} else {
  					assign(props, val)
  				}
  				
  			} else {
  				children.push(val)
  			}
  		})
  		applyStyleDefaults(viewName, props)
  		return React.createElement(viewSpecifier, props, ...children)
  	}
  }
docs: E.g createFactory('div') or createFactory('button') for react-dom, and createFactory(React.View) or createFactory(React.ScrollView) for react-native