If the schema is a fully-specified object, we can rely on its __eq__ to do the match. If the schema specifies only the type and does not unpack attributes, that's even easier. The tough part is a schema that has a half-specified object where where its __eq__ cannot be relied on. If all Unbounds are equal to everything, that would help a half-specified schema compare well, but it breaks all sorts of other code, such as list.index. I chose to compare all public, non-Unbound attributes, but that may not have been the implementation of its __eq__. Alternatively, one could trace __eq__ execution and revise Unbound comparisons, but that's beyond my wizarding abilities.
Given my solution of a Binding object and unpacking into its attributes, one cannot, for example, unpack the first argument of a range as it raises a TypeError: bind=Binding(); schema = range(bind.x).
I'm considering removing object-unpacking from the module. To match and unpack an object, the schema could be specified as a mapping or sequence and the user would transform the object into a mapping (like obj.__dict__) before doing the match.
If the schema is a fully-specified object, we can rely on its
__eq__to do the match. If the schema specifies only the type and does not unpack attributes, that's even easier. The tough part is a schema that has a half-specified object where where its__eq__cannot be relied on. If all Unbounds are equal to everything, that would help a half-specified schema compare well, but it breaks all sorts of other code, such aslist.index. I chose to compare all public, non-Unbound attributes, but that may not have been the implementation of its__eq__. Alternatively, one could trace__eq__execution and revise Unbound comparisons, but that's beyond my wizarding abilities.Given my solution of a Binding object and unpacking into its attributes, one cannot, for example, unpack the first argument of a
rangeas it raises a TypeError:bind=Binding(); schema = range(bind.x).I'm considering removing object-unpacking from the module. To match and unpack an object, the schema could be specified as a mapping or sequence and the user would transform the object into a mapping (like
obj.__dict__) before doing the match.