Fork me on GitHub

Hi, out of curiosity, how you would express the following in Typed Clojure?

data T
   = A Float
   | B String
   | C Int Int
  deriving (Eq)
So far I've come up with:
(ann-datatype A [f :- Float])
(deftype A [f])

(ann-datatype B [s :- String])
(deftype B [s])

(ann-datatype C [x :- Int, y :- Int])
(deftype C [x y])

(defalias T (U A B C))