docs: def literal(compiler, cont, arg):
    '''any given instance string'''
    text = compiler.new_var(il.ConstLocalVar('text'))
    pos = compiler.new_var(il.ConstLocalVar('pos'))
    p = compiler.new_var(il.LocalVar('p'))
    i = compiler.new_var(il.LocalVar('i'))
    x = compiler.new_var(il.ConstLocalVar('x'))
    length = compiler.new_var(il.ConstLocalVar('length'))  
    length2 = compiler.new_var(il.ConstLocalVar('length2'))  
    if isinstance(arg, Var):
      return il.Begin((
        il.Assign(x, il.Deref(arg)),
        il.AssignFromList(text, pos, il.parse_state),
        il.Assign(length, il.Len(text)),
        il.Assign(length, il.Len(x)),
        il.Assign(i, il.Integer(0)),
        il.Assign(p, pos),
        il.while_(il.and_(il.Lt(i, length2), il.Lt(p, length), il.Eq(il.GetItem(text, p), il.GetItem(x, i))), 
          il.AddAssign(p, il.Integer(1))),
        il.If(il.Lt(i, length2), 
          il.failcont(il.NONE),
          il.begin(il.append_failcont(compiler, 
            il.SetParseState(il.Tuple(text, pos))),
            il.SetParseState(il.Tuple(text, p)),
            cont(arg)))))
    elif isinstance(arg, String):
      arg = arg.interlang()
      return il.Begin((
        il.AssignFromList(text, pos, il.parse_state),
        il.Assign(length, il.Len(text)),
        il.Assign(length2, il.Len(arg)),
        il.Assign(i, il.Integer(0)),
        il.Assign(p, pos),
        il.while_(il.and_(il.Lt(i, length2), il.Lt(p, length), il.Eq(il.GetItem(text, p), il.GetItem(arg, i))), 
          il.AddAssign(p, il.Integer(1)),
          il.AddAssign(i, il.Integer(1)),
          ),
        il.If(il.Lt(i, length2), 
          il.failcont(il.NONE),
          il.begin(il.append_failcont(compiler, 
            il.SetParseState(il.Tuple(text, pos))),
            il.SetParseState(il.Tuple(text, p)),
            cont(arg)))))
    else:
      raise CompileTypeError