           (Node x xs) (fold with (with initial x) xs))))
   """
   "(elem? 2 (Node 2 Nil))", yes
+  # Dependency on subclass not supported now:
+  #     (fold found-or-equals False in)
+  #     found-or-equals (fn [found item]
+  #       (= what item))
 
   'nested pattern matching'
   """

      # Check the declared type
      declaredType = ctx.type name
      explicitType = freshInstance ctx, declaredType
      unify ctx, currentType.type, explicitType.type
      unifiedType = substitute ctx.substitution, explicitType
      inferredType = quantifyUnbound ctx, unifiedType
      if not typeEq inferredType, declaredType
        ctx.extendSubstitution substituionFail "#{name}'s declared type is too general, inferred #{plainPrettyPrint inferredType}"
      # Context reduction
      isDeclaredConstraint = (c) ->

      ctx.addInstance instanceName, instance

      ctx.newScope()

      assignMethodTypes ctx, instanceConstraint, freshInstanceType, instanceName,
        classDefinition, instanceType, constraints
      definitions = pairs wheres
