// Algebraic Enums - Enums with data (tagged unions)
import Std::Io::{PrintLine, PrintInt};


enum Result {
    Ok(int),
    Err(String)
}

func Main() -> int {
    let r1: Result = Result { tag: Result_Ok };
    r1.data.Ok_0 = 42;

    let r2: Result = Result { tag: Result_Err };
    r2.data.Err_0 = "error message";

    if r1.tag == Result_Ok {
        PrintLine("r1 is Ok:");
        PrintInt(r1.data.Ok_0);
        PrintLine("");
    }

    if r2.tag == Result_Err {
        PrintLine("r2 is Err:");
        PrintLine(r2.data.Err_0);
    }

    return 0;
}
