diff --git a/quad2/quad.rkt b/quad2/quad.rkt index ea887ef2..2c59768f 100644 --- a/quad2/quad.rkt +++ b/quad2/quad.rkt @@ -37,14 +37,18 @@ (apply hash-union! #:combine (λ (v1 v2) v2) qas attrss) qas) -(define (quad-attrs? x) (hash-eq? x)) +(define (quad-attrs? x) (and (hash? x) (hash-eq? x))) (define (quad-elems? x) (list? x)) (define/contract (make-quad #:tag [tag #false] #:attrs [attrs (make-quad-attrs null)] #:elems [elems null]) - (() (#:tag quad-tag? #:attrs quad-attrs? #:elems quad-elems?) . ->* . quad?) - (let ([attrs (if (immutable? attrs) (make-hasheq (hash->list attrs)) attrs)]) + (() (#:tag quad-tag? #:attrs (or/c quad-attrs? (listof any/c)) #:elems quad-elems?) . ->* . quad?) + (let ([attrs (let loop ([attrs attrs]) + (cond + [(list? attrs) (loop (apply hasheq attrs))] + [(immutable? attrs) (make-hasheq (hash->list attrs))] + [else attrs]))]) (quad-constructor tag attrs elems #false))) (define (quad-ref q-or-qs key [default-val #false])