// kmr_sb1 sandbox x1 = [ 123, "abc", #abc, 'abc', `abc ] x2 = [`plus, [`lit, 2], [`lit, 5]] x3 = [ 123 ] ometa M1 { list0 = [ anything:ins1 anything* ] -> [ins1], // list0 = [ anything* ], list1 = [ 123 ], list2 = [] } M1.match(x1, "list0" ) M1.match([], "list2" ) ometa F1 { flatten = [ inside:xs ] -> xs, inside = [ inside:xs ] inside:ys -> ( xs.concat(ys)) | anything:x inside:ys -> ([x].concat(ys)) | empty -> ([]) } F1.match([`plus, [`lit, 2], [`lit, 5]], "flatten") ometa F2 { flatten = [ inside:xs ] -> xs, inside = [] | [ inside:xs ] inside:ys -> ( xs.concat(ys)) | anything:x inside:ys -> ([x].concat(ys)) } F2.match([], "flatten") F2.match([[]], "flatten") /* [] */ [] F2.match([[1]], "flatten") F2.match([1,2], "flatten") F2.match([[1],2], "flatten") [1].concat(2) [1].concat([2]) 1/* [] */ 2+1