anchor.diff:              |> Context.changePos id sub ctx
               |> bind (uncurry (ignoreContext expectInt))
           | IIdx (eltype, length, arr, ix) ->
  -            // TODO(CaptainHayashi): this is awful.
  -            let originalType = Array (eltype, length, ())
  -
  -            (* Ensure the traversal doesn't change eltype or length to something
  -               we're not expecting. *)
               let assemble (arr', ix') =
                   ok (IIdx (eltype, length, arr', ix'))
               let tResult =
  
positive.code:             |> Context.changePos id sub ctx
              |> bind (uncurry (ignoreContext expectBool))
          | BIdx (eltype, length, arr, ix) ->
              // TODO(CaptainHayashi): this is awful.
              let originalType = Array (eltype, length, ())
  
              (* Ensure the traversal doesn't change eltype or length to something
                 we're not expecting. *)
              let assemble (arr', ix') =
                  ok (BIdx (eltype, length, arr', ix'))
              let tResult =
  
negative.code:         | AVar x ->
              let typedVar = CTyped.Array (eltype, length, x)
              let exprResult = Context.changePos id sub ctx typedVar
              bind
                  (uncurry (ignoreContext (expectArray eltype length)))
                  exprResult
          | AIdx (eltype, length, arr, ix) ->
              let assemble (arr', ix') =
                  ok (AIdx (eltype, length, arr', ix'))
              let tResult =
  