 
   match: (argument) -> @getMatcher().match(argument, @getValue())
 
-@Overloadable = Overloadable+
+if define?.amd?
+  define(-> Overloadable)
+else if module?.exports?
+  module.exports = Overloadable
+else
+  @Overloadable = Overloadable

        hasProperty = propertyName of argument
      else
        propertyName = property
        hasProperty = Object.prototype.hasOwnProperty.call(argument, propertyName)

      if hasProperty isnt true then return false


      return false unless compiledMatcher.match(argument)

    true

class MatcherFactory
  constructor: () ->
