edgedb-js icon indicating copy to clipboard operation
edgedb-js copied to clipboard

Fix `anyscalar` behavior in query builder

Open scotttrinh opened this issue 1 year ago • 1 comments

In EdgeQL, anyscalar is a kind of generic that binds other usages to the same concrete type when applied rather than being a union of all scalar types as the name implies (and as we're currently treating it).

So, when we have a function or operator that uses anyscalar for two or more operands/arguments, the actual type is constrained as if all arguments agree on the instance of the generic. So more like:

function eq<T extends scalar>(l: T, r: T);

instead of

function eq(l: scalar, r: scalar);
// or
function eq<T extends scalar, U extends scalar>(l: T, r: U);

scotttrinh avatar Aug 29 '24 18:08 scotttrinh

@scotttrinh :)

Hello , Please use a constraint such as {function eq<T extends scalar>(l: T, r: T);} to alter function signatures in order to enforce that all arguments share the same concrete type and so fix the anyscalar problem. In order to guarantee type consistency, remove any signatures that permit distinct types. To ensure that the desired behavior is followed and to avoid runtime problems, implement unit tests.

naaa760 avatar Sep 23 '24 06:09 naaa760