;; is 't' a complex type?
(define impc:ti:complex-type?
(lambda (t)
(if (and (atom? t)
(not (string? t)))
#f
(if (string? t) #t
(if (and (number? (car t)) ;; if list starts with a number (i.e. not a symbol)
(<> (car t) *impc:ir:void*) ;; if not void
;; if proper complex type (tuple,array,closure)
(member (modulo (car t) *impc:ir:pointer*)
(list *impc:ir:tuple* *impc:ir:array* *impc:ir:vector* *impc:ir:closure*)))
#t
#f)))))