concept Foo { type bar; fun fooey(Z x) -> bar@; }; fun yikes where { Foo } (Foo.bar u, S s, T t) -> S { return s; } fun zow where { Foo } (T t) -> T { return yikes(fooey(t), t, t); } struct foo { int x; }; model Foo { type bar = int; fun fooey(foo f) -> int@ { return f.x; } }; fun main() -> int@ { let f = @foo{ x = 3 }; return 3 - zow(f).x; }