function createMatcher(expectation, message) {
			var m = Object.create(matcherPrototype);
			var type = typeOf(expectation);

			if (message !== undefined && typeof message !== "string") {
				throw new TypeError("Message should be a string");
			}

			if (arguments.length > 2) {
				throw new TypeError(
					`Expected 1 or 2 arguments, received ${arguments.length}`
				);
			}

			if (type in TYPE_MAP) {
				TYPE_MAP[type](m, expectation, message);
			} else {
				m.test = function (actual) {
					return deepEqual(actual, expectation);
				};
			}

			if (!m.message) {
				m.message = `match(${valueToString(expectation)})`;
			}

			return m;
		}
Creates a matcher object for the passed expectation

@alias module:samsam.createMatcher
@param {*} expectation An expecttation
@param {string} message A message for the expectation
@returns {object} A matcher object