 
 termCompile = (ctx, term) ->
   ctx.downInsideDefinition()
-  ctx.setIsOperator no
   compiled = expressionCompile ctx, term
-  ctx.resetIsOperator()
   ctx.upInsideDefinition()
   compiled
 

  # isInsideSimpleDefinition: ->
  #   (definition = @_currentDefinition())

  isOperator: ->
    @_isOperator[@_isOperator.length - 1]

  setIsOperator: (isOperator) ->
    @_isOperator.push isOperator

  resetIsOperator: ->
    @_isOperator.pop()

  # Assignment translation works as follows:
  #   1. parent sets assign to
  #   2. patterns look at the assign to value

  freshingSub = mapMap ((kind) -> ctx.freshTypeVariable kind), classParams

  freshedClassType = mapOrigin (substitute freshingSub, classDeclaration.constraint.types), (_operator typeExpression)
  if isFailed (check = mostGeneralUnifier freshedClassType, freshInstanceType.type)
    ctx.extendSubstitution check
    return null

