// RUN: %verve | %check enum Shape { Square(Int) Rectangle(Int, Int) } interface Area { let area : (U) -> Int } implementation Area { fn area(s) { match s { case Square(x): x * x case Rectangle(x, y): x * y } } } Square(10).area() // CHECK-L: 100 : Int Rectangle(4, 5).area() // CHECK-L: 20 : Int class House { let rooms : List } implementation Area { fn area(h) { h.rooms.map(area).reduce((+), 0) } } House { rooms: [Square(10), Rectangle(4, 5)] }.area() // CHECK-L: 120 : Int