1(type A extern (enum (B (x u32) (y u32))))
2
3(decl get_a (A) u32)
4(extern extractor get_a get_a)
5
6(decl pure partial u32_pure (u32) u32)
7(extern constructor u32_pure u32_pure)
8
9(decl entry (u32) u32)
10(rule (entry x @ (get_a a1))
11      (if-let (get_a a2) x)
12      (if-let (A.B p q) a1)
13      (if-let r (u32_pure p))
14      r)
15