public IValue compute(IValue cursor, IValue to, IValue from) {
checkCursorness("first", cursor);
checkUnaryFunction("second", to);
checkUnaryFunction("third", from);
ICursor c = (ICursor)cursor;
Context ctx = new InvertorContext(c.getCtx(), (ICallableValue)from);
ICallableValue f = (ICallableValue)to;
IValue computed = f.call(new Type[] {c.getWrappedValue().getType()}, new IValue[] { c.getWrappedValue() }, null).getValue();
return CursorFactory.makeCursor(computed, ctx);
}