import LIB/default.lm; type XY X | (Y( U64 )); type XYZ (Z( XY , U64 )); xy := (: X XY); xy2 := (: (Y( 12_u64 )) XY); xyz := (: (Z( (Y( 123_u64 )) 456_u64 )) XYZ); main := λ. (: ( (let x X) (print (.0 x)) (set x X) (print (.0 x)) (set x (Y( 123_u64 ))) (print (.0 x)) (print (.1 (as x Tag))) (print '\n_s) (print (.0 xy)) (set xy X) (print (.0 xy)) (set xy (Y( 123_u64 ))) (print (.0 xy)) (print (.1 (as xy Tag))) (print '\n_s) (print (.0 xy2)) (print (.1 (as xy2 Tag))) (set xy2 X) (print (.0 xy2)) (set xy2 (Y( 123_u64 ))) (print (.0 xy2)) (print (.1 (as xy2 Tag))) (print '\n_s) (let xy3 (Y( 456_u64 ))) (print (.0 xy3)) (print (.1 (as xy3 Tag))) (set xy3 X) (print (.0 xy3)) (set xy3 (Y( 123_u64 ))) (print (.0 xy3)) (print (.1 (as xy3 Tag))) (print '\n_s) (print (.0 xyz)) (print (.1 (as xyz Tag))) (let ixy (.2 (as xyz Tag))) (print (.0 ixy)) (print (.1 (as ixy Tag))) (print '\n_s) ) Nil);