import LIB/default.lm; type XY X | (Y( U64 )); type XYZ (Z( XY , U64 )); f := λ(: x U64)(: y U64). (: ( (let buffer 555_u64) (print 'F1_s) (let xyz (Z( (Y( x )) y ))) (print (.0 xyz)) (print (.1 xyz)) (let xy (.2 (as xyz Tag))) (print (.0 xy)) (print (.1(as xy Tag))) (print '\n_s) xyz ) XYZ); f2 := λ(: x U64). (: ( (let buffer 555_u64) (print 'F2_s) (let xyz (Z( (Y( x )) 456_u64 ))) (print (.0 xyz)) (print (.1 (as xyz Tag))) (let xy (.2 (as xyz Tag))) (print (.0 xy)) (print (.1(as xy Tag))) (print '\n_s) xyz ) XYZ); f3 := λ(: x U64)(: y U64). (: ( (let buffer 555_u64) (print 'F3_s) (let xyz (Y( x ))) (print (.0 xyz)) (print (.1 (as xyz Tag))) (print '\n_s) xyz ) XY); f4 := λ(: x U64). (: ( (let buffer 555_u64) (print 'F4_s) (let xyz (Y( x ))) (print (.0 xyz)) (print (.1 (as xyz Tag))) (print '\n_s) xyz ) XY); f5 := λ(: xyz XYZ). (: ( (print 'F5_s) (print (.0 xyz)) (print (.1 (as xyz Tag))) (let xy (.2 (as xyz Tag))) (print (.0 xy)) (print (.1(as xy Tag))) (print '\n_s) xyz ) XYZ); f6 := λ(: abc XYZ). (: ( (let xyz (Z( (Y( 123_u64 )) 456_u64 ))) (print 'F6_s) (print (.0 xyz)) (print (.1 (as xyz Tag))) (let xy (.2 (as xyz Tag))) (print (.0 xy)) (print (.1(as xy Tag))) (print '\n_s) xyz ) XYZ); main := λ. (: ( (let xyz (f( 123_u64 456_u64 ))) (print (.0 xyz)) (print (.1 (as xyz Tag))) (let xy (.2 (as xyz Tag))) (print (.0 xy)) (print (.1(as xy Tag))) (print '\n_s) (match (f( 123_u64 456_u64 )) ( () ( (Z( (Y( x )) y )) ( (print x) (print y) (print '\n_s) )) )) (let xyz2 (f3( 123_u64 456_u64 ))) (print (.0 xyz2)) (print (.1 (as xyz2 Tag))) (match (f3( 123_u64 456_u64 )) ( () ( (Y( x )) ( (print x) (print '\n_s) )) )) (let xyz3 (f4( 123_u64 ))) (print (.0 xyz3)) (print (.1 (as xyz3 Tag))) (match (f4( 123_u64 )) ( () ( (Y( x )) ( (print x) (print '\n_s) )) )) (let xyz4 (f2( 123_u64 ))) (print (.0 xyz4)) (print (.1 (as xyz4 Tag))) (let xy4 (.2 (as xyz4 Tag))) (print (.0 xy4)) (print (.1(as xy4 Tag))) (print '\n_s) (match (f2( 123_u64 )) ( () ( (Z( (Y( x )) y )) ( (print x) (print y) (print '\n_s) )) )) (let xyz5 (f5( (Z( (Y( 123_u64 )) 456_u64 )) ))) (print (.0 xyz5)) (print (.1 (as xyz5 Tag))) (let xy5 (.2 (as xyz5 Tag))) (print (.0 xy5)) (print (.1(as xy5 Tag))) (print '\n_s) (let xyz6 (f6( (Z( (Y( 777_u64 )) 888_u64 )) ))) (print (.0 xyz6)) (print (.1 (as xyz6 Tag))) (let xy6 (.2 (as xyz6 Tag))) (print (.0 xy6)) (print (.1(as xy6 Tag))) (print '\n_s) ) Nil);