     if op.ir is irMethodTranslate
       []
     else
-      for constraint in finalType.constraints
-        if constraint.type instanceof TypeVariable
-          ctx.classParamNameFor constraint.type.name
-        else if _notEmpty constraintsFromInstance ctx, constraint
-          throw new Error "not implemented yet, add other recursively"
-        else
-          instanceDictFor ctx, constraint
+      dictsForConstraint ctx, finalType.constraints
   (jsCall (translateIr ctx, op), (join classParams, (translateIr ctx, args)))
 
 irMethod = (type, name) ->

  compiledPairs = join compiledPairs, compileDeferred ctx
  resolveDeferredTypes ctx

  #log "yay"
  concat filter _is, compiledPairs

# This function resolves the types of mutually recursive functions

      stack.push form
    else if token.symbol in rightDelims
      closed = stack.pop()
      if not stack[stack.length - 1]
        throw new Error "Missing opening delimeter matching #{token.symbol}"
      if token.symbol isnt delims[closed[0].symbol]
        throw new Error "Wrong closing delimiter #{token.symbol} for opening delimiter #{closed[0].symbol}"
      closed.push token
      closed.end = token.end
      stack[stack.length - 1].push closed
    else
      stack[stack.length - 1].push token
