     # Each failure consists of the expected code and reason for fail
     failure: (code, reasoning) ->
         return @$failure if arguments.length is 0
-        isCode = _.isNumber code
-        isReasoning = _.isString reasoning
         noCode = "The code is not a number"
         noReasoning = "The reasoning is not a string"
-        throw new Error noCode unless isCode
-        throw new Error noReasoning unless isReasoning
+        assert _.isString(reasoning), noReasoning
+        assert _.isNumber(code), noCode
         @emit "failure", arguments...
         (@$failure ?= []).push
             reasoning: reasoning

    # Notes are warning/beware messages about the implementation.
    notes: (notes) ->
        return @$notes if arguments.length is 0
        isNotes = _.isString notes
        noNotes = "The notes is not a string"
        throw new Error noNotes unless isNotes
        @emit "notes", arguments...
        @$notes = notes.toString()


    # Argument consists of name, approximate type and description.
    argument: (identify, typeable, description) ->
        return @$argument if arguments.length is 0
        noIdentify = "The identify is not a string"
        noTypeable = "The typeable is not a string"
        noDescription = "The description is not a string"
        assert _.isString(description), noDescription
        assert _.isString(identify), noIdentify
        assert _.isString(typeable), noTypeable
        @emit "argument", arguments...
        (@$argument ?= []).push
            description: description
