use aiken/builtin pub type Thing { wow: Int, } test assert_1() { assert thing: Thing = builtin.constr_data(0, [builtin.i_data(1)]) thing.wow == 1 } fn cast_to_thing(x: Data) -> Thing { assert x: Thing = x x } test assert_2() { let thing = Thing { wow: 1 } let still_thing = cast_to_thing(thing) still_thing.wow == 1 } // should not typecheck // test unlift_data_without_assert_1() { // let thing: Thing = builtin.constr_data(0, [builtin.i_data(1)]) // thing.wow == 1 // } // should not typecheck // fn bad_cast(x: Thing) -> Int { // x.wow // } // test unlift_data_without_assert_2() { // let thing = builtin.constr_data(0, [builtin.i_data(1)]) // bad_cast(thing) == 1 // }