trait Printable {
    fn format(value: Int): String
}

impl Printable for Int {
    fn format(value: Int): String = "Number: " + toString(value)
}

type Color =
    | Red
    | Green
    | Blue
    | RGB(Int, Int, Int)

fn colorName(c: Color): String =
    match c {
    Red => "red",
    Green => "green",
    Blue => "blue",
    RGB(r, g, b) => "rgb(" + toString(r) + "," + toString(g) + "," + toString(b) + ")",
}

let myColor = RGB(255, 128, 0)

let redColor = Red

let greenColor = Green

fn printResults(): Unit with {Console} = {
    Console.print("RGB color: " + colorName(myColor))
    Console.print("Red color: " + colorName(redColor))
    Console.print("Green color: " + colorName(greenColor))
}

let output = run printResults() with {}
