 
     r = new APLArray omega.toArray(), omega.shape
     p = 0 # pointer in r
-    for a in [0...subscripts.length]
+    for a in [0...subscripts.length] by 1
+      if subscripts[a].length is 0 then return r
       p += subscripts[a][0] * r.stride[a]
     q = value.offset # pointer in value
     u = repeat [0], subscripts.length

  # 'hello'[1]                          <=> 'e'
  # 'ipodlover'[1 2 5 8 3 7 6 0 4]      <=> 'poordevil'
  # ('axlrose'[4 3 0 2 5 6 1])[0 1 2 3] <=> 'oral'
  #
  #! " X"[(3 3⍴⍳9)∊1 3 6 7 8] <=> 3 3⍴,/(' X '
  #! ...                                 'X  '
  #! ...                                 'XXX')
  _index: (alphaAndAxes, omega) ->
    [alpha, axes] = alphaAndAxes.toArray()
    squish omega, alpha, axes

  # a←'this is a test' ⋄ a[0 5]←'TI' <=> 'This Is a test'
  # Data←0 4 8 ⋄ 10+ (Data[0 2]← 7 9) <=> 17 14 19
  # a←3 4⍴⍳12 ⋄ a[;1 2]←99 <=> 3 4⍴0 99 99 3 4 99 99 7 8 99 99 11
  # a←1 2 3 ⋄ a[⍬]←4 ⋄ a <=> 1 2 3
  # a←3 3⍴⍳9 ⋄ a[⍬;1 2]←789 ⋄ a <=> 3 3⍴⍳9
  # a←1 2 3 ⋄ a[]←4 5 6 ⋄ a <=> 4 5 6
  _substitute: (args) ->
    [value, alpha, omega, axes] =
      for x in args.toArray()
