package foo:types;
interface types {
type t1 = u8;
type t2 = u16;
type t3 = u32;
type t4 = u64;
type t5 = s8;
type t6 = s16;
type t7 = s32;
type t8 = s64;
type t9a = f32;
type t9b = f32;
type t10a = f64;
type t10b = f64;
type t11 = char;
type t12 = list<char>;
type t13 = string;
type t14 = option<u32>;
type t15 = result<u32, u32>;
type t16 = result<_, u32>;
type t17 = result<u32>;
type t18 = result;
record t19 { a: u32 }
record t20 { a: u32, }
record t21 { a: u32, b: u64 }
record t22 { a: u32, b: u64, }
record t23 { x: u32 }
record %record { a: u32 }
type t25 = tuple<u32>;
type t26 = tuple<u32,>;
type t27 = tuple<u32, u64>;
flags t28 { a, b, c }
flags t29 { a, b, c, }
variant t30 { a }
variant t31 { a, b }
variant t32 { a, b, }
variant t33 { a, b(u32), }
variant t34 { a, b(option<u32>), }
enum t35 { a, b, c }
enum t36 { a, b, c, }
type t37 = bool;
type t38 = string;
type t39 = list<list<list<t32>>>;
type t40 = t44;
type t41 = %t44;
type t42 = stream<u32>;
type t43 = future<u32>;
type t44 = future;
type t45a = list<u32, 4>;
type t45b = list<list<u32, 4>, 2>;
/// type order doesn't matter
type foo = bar;
type bar = u32;
}