         # ... before after <=> (3 18.84 28.27)(4 25.13 50.26)
         name = node[1]
         {vars} = node.scopeNode
-        if (v = vars["get_#{name}"])?.type is 'F'
+        if (v = vars["get_#{name}"])?.category is VERB
           [LDC, APLArray.zero, GET, v.scopeDepth, v.slot, MON]
         else
           v = vars[name]

  opts.aplCode = aplCode
  compileAST parse(aplCode, opts), opts

compileAST = (ast, opts = {}) ->
  ast.scopeDepth = 0
  ast.nSlots = if prelude then prelude.ast.nSlots else 0
  ast.vars = if prelude then Object.create prelude.ast.vars else {}
  do ->
    opts.ctx ?= Object.create vocabulary
    for k, v of opts.ctx when not ast.vars[k]
      ast.vars[k] = varInfo = type: 'X', slot: ast.nSlots++, scopeDepth: ast.scopeDepth
      if typeof v is 'function' or v instanceof λ
        varInfo.type = 'F'
        if v.isAdverb      then varInfo.isAdverb      = true
        if v.isConjunction then varInfo.isConjunction = true
        if /^[gs]et_.*/.test k then ast.vars[k[4..]] = type: 'X'

  err = (node, message) ->
    syntaxError message, file: opts.file, line: node.startLine, col: node.startCol, aplCode: opts.aplCode

        else
          assert 0

    visitLHS = (node, rhsType) ->
      node.scopeNode = scopeNode
      switch node[0]
        when 'symbol'
          name = node[1]
          if name is '∇' then err node, 'Assignment to ∇ is not allowed.'
          if vars[name]
            if vars[name].category isnt rhsType
              err node, "Inconsistent usage of symbol '#{name}', it is assigned both nouns and verbs."
          else
            vars[name] = scopeDepth: scopeNode.scopeDepth, slot: scopeNode.nSlots++, category: rhsType
        when 'expr'
          rhsType is NOUN or err node, 'Strand assignment can be used only for nouns.'
          for i in [1...node.length] by 1 then visitLHS node[i], rhsType
        when 'index'
          rhsType is NOUN or err node, 'Index assignment can be used only for nouns.'
          visitLHS node[1], rhsType
          for i in [2...node.length] by 1 when c = node[i] then visit c
        else
          err node, "Invalid LHS node type: #{JSON.stringify node[0]}"
      rhsType

    for i in [1...scopeNode.length] by 1 then visit scopeNode[i]

