// 실행되는 첫 프로그램. // // main은 자기가 선언한 capability만 받는다. Console을 파라미터에서 지우면 // print할 방법이 프로그램 안에 없다 — ambient authority가 없다는 것의 // 실행 시점 의미다. pub capability Console { fn print(s: String) effects {Console.print} } pub enum Shape { Circle(Int), Square(Int), } pub fn area(s: Shape) -> Int { match s { Circle(r) => r * r * 3, Square(w) => w * w, } } pub fn main(c: Console) effects {Console.print} { let shapes = [Circle(2), Square(3), Circle(1)] List.each(shapes, fn(s) { c.print(String.concat("area = ", Int.show(area(s)))) }) }