         
 matcherFactory = new MatcherFactory()
 
-class AbstractMatcher
-    @_getClassOf: (what) -> 
-        whatAsString = Object::toString.call(what)
-        /\[object (\w+)\]/.exec(whatAsString)[1].toLowerCase()
-        
+class AbstractMatcher        
     @getMatcher: (argument) ->
-        argumentClass = @_getClassOf argument
+        argumentClass = Utils.getClassOf argument
         matcherFactory.getMatcher argumentClass
     
     compile: (value) ->

                enumerable: false
                writable: false
                configurable: false

class Overloadable
    @_inheritFromOverloadable: do ->

            arrayCount = 0
            flattenedArray = []
            for element in previousStepResult
                if Utils.getClassOf(element) is "array"
                    flattenedArray.push element...
                    arrayCount += 1
                else
