(define impc:ir:tuple?
(lambda (type)
(if (list? type)
(if (< (length type) 2) #f
(if (impc:ir:tuple? (car type)) #t #f))
(let ((t (impc:ir:str-list-check type)))
(if (symbol? t) #f ;; symbol will be poly type
(if (string? t)
(impc:ti:namedtype-exists? (impc:ir:get-base-type t))
(if (= (modulo t *impc:ir:pointer*) *impc:ir:tuple*)
#t #f)))))))