                 enumerable: false
                 writable: false
                 configurable: false
+                
+    @getClassOf: (what) -> 
+        whatAsString = Object::toString.call(what)
+        /\[object (\w+)\]/.exec(whatAsString)[1].toLowerCase()
 
 class Overloadable
     @_inheritFromOverloadable: do ->

        
class TypeMatcher extends AbstractMatcher        
    match: (argument, overloadSignatureElement) ->
        AbstractMatcher._getClassOf(argument) is overloadSignatureElement
        
    matcherFactory.registerMatcher "string", TypeMatcher
        

        
matcherFactory = new MatcherFactory()

class AbstractMatcher        
    @getMatcher: (argument) ->
        argumentClass = Utils.getClassOf argument
        matcherFactory.getMatcher argumentClass
    
    compile: (value) ->
