Parser: skip unit suffix when next ident is a comparison keyword (starts, ends, contains, matches, is, does, in, precedes, follows). Fixes "123 starts with '12'" returning "123starts" instead of true. eval-hs: use hs-compile directly instead of hs-to-sx-from-source with "return " prefix, which was causing the parser to consume the comparison as a string suffix. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
33 lines
854 B
Plaintext
33 lines
854 B
Plaintext
(define spec-form-effects
|
|
(fn
|
|
(form)
|
|
(let
|
|
((result (list)) (found false))
|
|
(when
|
|
(> (len form) 3)
|
|
(for-each
|
|
(fn
|
|
(item)
|
|
(if
|
|
found
|
|
(when
|
|
(and (list? item) (empty? result))
|
|
(for-each
|
|
(fn
|
|
(eff)
|
|
(append!
|
|
result
|
|
(if
|
|
(= (type-of eff) "symbol")
|
|
(symbol-name eff)
|
|
(str eff))))
|
|
item)
|
|
(set! found false))
|
|
(when
|
|
(and
|
|
(= (type-of item) "keyword")
|
|
(= (keyword-name item) "effects"))
|
|
(set! found true))))
|
|
(slice form 2)))
|
|
result)))
|