concept Comparable { fun better(T,T) -> bool@; }; struct Apple { int rating; }; model Comparable { fun better(Apple a, Apple b) -> bool@ { return a.rating > b.rating; } }; fun pick where { Comparable } (T x, T y) -> T { if (better(x,y)) return x; else return y; } fun main() -> int@ { let a = @Apple{ rating = 1 }; let b = @Apple{ rating = 2 }; let c = pick(a,b); if (c.rating == 2) return 0; else return -1; }