(module comprehensions mzscheme
(require (prefix set: "set.ss")
(lib "42.ss" "srfi"))
(provide set-ec :set)
(require (lib "42.ss" "srfi"))
(define-syntax set-ec
(syntax-rules ()
[(_ empty etc1 etc ...)
(fold-ec empty etc1 etc ... set:insert)]))
(define-syntax :set
(syntax-rules (index)
((:set cc var (index i) arg)
(:parallel cc (:stack var arg) (:integers i)) )
((:set cc var arg)
(:do cc
(let ())
((s arg))
(not (set:empty? s))
(let ((var (set:select s))))
#t
((set:remove var s))
))))
(define (:set-dispatch args)
(cond
[(null? args)
'set]
[(and (= (length args) 1)
(set:set? (car args)))
(:generator-proc (:set (car args)))]
[else
#f]))
(:-dispatch-set!
(dispatch-union (:-dispatch-ref) :set-dispatch)))