private static Node index(Node left, Node right)
	{
		try
		{
			Object collection = left.getArgument().asObject();
			Object result;
			if (collection.getClass().isArray())
			{
				int index = getIndex(right, Array.getLength(collection));
				result = Array.get(collection, index);
			}
			else if (collection instanceof List)
			{
				List list = (List) collection;
				int index = getIndex(right, list.size());
				result = list.get(index);
			}
			else if (collection instanceof Map)
			{
				Object key = right.getArgument().asObject();
				result = ((Map) collection).get(key);
			}
			else if (collection instanceof String)
			{
				String str = (String) collection;
				int index = getIndex(right, str.length());
				return new StringArgument(left, str.charAt(index));
			}
			else
				throw new EvaluationException(left, "Invalid list type " + collection.getClass().getName() + ".");
			
			return (Node) Config.wrap(left, result, false);
			
//			throw new EvaluationException(left, "Invalid Type for Operation: INDEX");
		}
		catch(IndexOutOfBoundsException e)
		{
			throw new EvaluationException(right, "Invalid Index.", e);
		}
	}