#lang typed/racket

(module test typed/racket
  (require "tagged.lp2.rkt"
           phc-toolkit
           "../type-expander/type-expander.lp2.rkt")
  
  (check-equal?: (match (ann (tagged t1 [x 1] [y "b"])
                             (tagged t1 [x : Number] [y : String]))
                   [(tagged t1 [x a] [y b]) (list 'ok b a)]
                   [_ #f])
                 '(ok "b" 1))
  (check-equal?: (match (ann (tagged foo [x "o"] [y 3] [z 'z])
                             (tagged foo
                                     [x String]
                                     [z 'z]
                                     [y Fixnum]))
                   [(tagged foo z x y) (list z y x)])
                 '(z 3 "o"))

  (define-type ma (tagged ma (fav String) (faa ma) (fab mb)))
  (define-type mb (tagged mb (fbv String) (fba ma))))