#lang scheme

(require htdp/matrix-sig
         htdp/matrix-render-sig
         htdp/matrix-unit)

(define render@
  (unit (import)
        (export matrix-render^)
        (define-struct invisible (matrix))
	(define visible? invisible?)
        (define make-visible make-invisible)
        (define visible-matrix invisible-matrix)))

(define invisible-matrix@
  (compound-unit
    (import)
    (export m)
    (link (((r : matrix-render^)) render@)
          (((m : matrix^)) matrix@ r))))

(define-values/invoke-unit invisible-matrix@ (import) (export matrix^))

(provide-signature-elements matrix^)
