HS: in-expression filter semantics (+1 test)
`1 in [1, 2, 3]` must return (list 1) not true. Root cause: in? compiled to hs-contains? which returns boolean for scalar items. Fix: new hs-in? returns filtered list; new in-bool? operator for is/am-in comparison contexts so those still return boolean. Parser generates in-bool? for `X is in Y` / `X am in Y`; plain `in` keeps in? → list return. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1535,6 +1535,25 @@
|
||||
(hs-contains? (rest collection) item))))))
|
||||
(true false))))
|
||||
|
||||
(define
|
||||
hs-in?
|
||||
(fn
|
||||
(collection item)
|
||||
(cond
|
||||
((nil? collection) (list))
|
||||
((list? collection)
|
||||
(cond
|
||||
((nil? item) (list))
|
||||
((list? item)
|
||||
(filter (fn (x) (hs-contains? collection x)) item))
|
||||
((hs-contains? collection item) (list item))
|
||||
(true (list))))
|
||||
(true (list)))))
|
||||
|
||||
(define
|
||||
hs-in-bool?
|
||||
(fn (collection item) (not (hs-falsy? (hs-in? collection item)))))
|
||||
|
||||
(define
|
||||
hs-is
|
||||
(fn
|
||||
|
||||
Reference in New Issue
Block a user