effect Log {
    fn info(msg: String): Unit
    fn debug(msg: String): Unit
}

fn computation(): Int with {Log} = {
    Log.info("Starting computation")
    let x = 10
    Log.debug("x = " + toString(x))
    Log.info("Processing")
    let result = x * 2
    Log.debug("result = " + toString(result))
    result
}

handler consoleLogger: Log {
    fn info(msg) = 
        {
    Console.print("[INFO] " + msg)
    resume(())
}
    fn debug(msg) = 
        {
    Console.print("[DEBUG] " + msg)
    resume(())
}
}

fn main(): Unit with {Console} = {
    let result = run computation() with {
    Log = consoleLogger,
}
    Console.print("Final: " + toString(result))
}

let output = run main() with {}
