(module show_user_adt
  (data IntBox
    (ctor MkIntBox (con Int)))
  (instance
    (class prelude.Show)
    (type (con IntBox))
    (method show
      (body (lam (params (typed x (con IntBox))) (ret (con Str)) (body (match x
        (case (pat-ctor MkIntBox n) (app int_to_str n))))))))
  (fn main
    (type (fn-type (params) (ret (own (con Unit))) (effects IO)))
    (params)
    (body (app print (term-ctor IntBox MkIntBox 7)))))
