#lang plait
(define-type Type
[numT]
[boolT]
[arrowT (arg : Type)
(result : Type)]
[varT (id : Number)
(val : (Boxof (Optionof Type)))])
(define gen-tvar-id!
(let ((counter 0))
(lambda ()
(begin
(set! counter (add1 counter))
counter))))
(define the-box (box (none)))
(define tau1 (arrowT (varT (gen-tvar-id!) the-box) (numT)))
(define tau2 (arrowT (varT (gen-tvar-id!) the-box) (numT)))
tau1 tau2
(set-box! the-box (some (boolT))) tau1