(module show_user_adt_with_label
  (data Item
    (ctor MkItem (con Int)))
  (instance
    (class prelude.Show)
    (type (con Item))
    (method show
      (body (lam (params (typed it (con Item))) (ret (con Str)) (body (match it
        (case (pat-ctor MkItem n) (app str_concat "Item " (app int_to_str n)))))))))
  (fn main
    (type (fn-type (params) (ret (own (con Unit))) (effects IO)))
    (params)
    (body (seq (app print (term-ctor Item MkItem 42)) (do io/print_str "\n")))))
