(def-type (Shape)
  (Circle Float)
  (Rectangle Float Float))

(def s1 (Circle 2.0))
(def s2 (Rectangle 3.0 4.0))

(match s2
  (Rectangle w h) (* w h)
  (Circle r)      (* 3.14159 r))