       # Replace assign to with cache name
       cacheName = @newJsVariable()
       cache = [cacheName, @assignTo()]
-      @_assignTos[@_assignTos.length - 1] = cacheName
+      # @_assignTos[@_assignTos.length - 1] = cacheName #instead change assignTo
       @cacheScopes[@cacheScopes.length - 1][0] = cache
 
   _translationCache: ->


    # TODO match

    'if', '(Fn Bool a a a)'
    # TODO JS interop

    'sqrt', '(Fn Num Num)'
    'not', '(Fn Bool Bool)'

    '^', binaryMathOpType

    '~', '(Fn Num Num)'

    '+', binaryMathOpType
    '*', binaryMathOpType
    '=', comparatorOpType
    '!=', comparatorOpType
    'and', '(Fn Bool Bool Bool)'
    'or', '(Fn Bool Bool Bool)'

    '-', binaryMathOpType
    '/', binaryMathOpType
    'rem', binaryMathOpType
    '<', comparatorOpType
    '>', comparatorOpType
    '<=', comparatorOpType
    '>=', comparatorOpType),
    newMapWith 'empty-array', (type: (parseUnConstrainedType '(Fn (Array a))'), arity: [])
      'cons-array', (type: (parseUnConstrainedType '(Fn a (Array a) (Array a))'), arity: ['what', 'onto'])



patternCompile = (ctx, pattern, matched, translatedMatched) ->

  ctx.setAssignTo ctx._translationCache() or translatedMatched
  # caching can occur while compiling the pattern
  # precs are {cond}s and {cache}s, sorted in order they need to be executed
  {precs, assigns} = expressionCompile ctx, pattern
