(use srfi-69)

(: make-int-to-symbol (-> (struct hash-table (fixnum symbol))))
(define (make-int-to-symbol)
  (make-hash-table))

(hash-table-set! (make-int-to-symbol) 'foo 2)

(hash-table-set! (hash-table-copy (the (struct hash-table #f) (make-int-to-symbol))) 'foo 2)

(: foo ((struct hash-table (fixnum)) -> fixnum))
(define (foo ht)
  (hash-table-size ht))

(print (foo (make-int-to-symbol)))

(: print-symbol (symbol -> *))
(define (print-symbol s)
  (print s))

(: add-numbers (number number -> number))
(define (add-numbers a b)
  (+ a b))

(: bar (forall (t) ((t -> *) (t t -> t) t t -> *)))
(define (bar pr op a b)
  (pr (op a b)))

(bar print-symbol add-numbers 'a 'b)
