So there are functions that use predicates or comparators on their data. Exemplified by list=:
(name . "list=")
(signature lambda ((procedure? elt=) (list? list1) ...) boolean?)
(subsigs (elt= (lambda (a b) *)))
elt= is clearly a boolean-returning function. But * is used because the type is technically unconstrained. Which is a conflict: there’s a constraint, but we cannot express it.
So I suggest adding a “boolean-ish” kind of pseudo-type and using it in the signatures of these predicates and comparators. The name is up to discussion, of course.
So there are functions that use predicates or comparators on their data. Exemplified by
list=:elt=is clearly a boolean-returning function. But*is used because the type is technically unconstrained. Which is a conflict: there’s a constraint, but we cannot express it.So I suggest adding a “boolean-ish” kind of pseudo-type and using it in the signatures of these predicates and comparators. The name is up to discussion, of course.