       instances: []
       declarations: declarations
 
+  maybeClassNamed: (name) ->
+    @_classNamed name
+
   classNamed: (name) ->
-    (@_classNamed name) or throw new Error "Class #{name} is not defined"
+    (@maybeClassNamed name) or throw new Error "Class #{name} is not defined"
 
   _classNamed: (name) ->
     for scope in (reverse @scopes)

    [instanceConstraint, defs...] = _validArguments call
    if not instanceConstraint or not isValidTypeConstraint ctx, instanceConstraint
      return malformed ctx, call, 'Requiring the instance type'
    else
      instanceType = typeConstraintCompile ctx, instanceConstraint
    [constraintSeq, wheres...] = defs
    if not isSeq constraintSeq
      wheres = defs
      constraints = []
    else
      constraints = typeConstraintsCompile ctx, _terms constraintSeq

    # TODO: defer if class does not exist
    className = instanceType.className
    classDefinition = ctx.classNamed className
    if not classDefinition
      return malformed ctx, (_operator instanceConstraint), 'Class doesn\'t exist'

    # TODO: defer if super class instances don't exist yet
    superClassInstances = findSuperClassInstances ctx, instanceType.types, classDefinition


  addAuxiliaryDependency: (dependent, dependency) ->
    aux = (lookupInMap @auxiliaries(), dependent)
    if aux # TODO: aux is missing if class is imported
      aux.deps = unique join aux.deps, [dependency]

  deferredNames: ->
    @_definition().deferredBindings
