///|
pub trait Logger {
  info(Self, String) -> Unit
}

///|
struct ConsoleLogger {}

///|
pub fn make_console_logger() -> ConsoleLogger {
  ConsoleLogger::{  }
}

///|
pub impl Logger for ConsoleLogger with info(_self, msg) {
  println("[INFO] \{msg}")
}

///|
struct MuteLogger {}

///|
pub impl Logger for MuteLogger with info(_self, _msg) {
  // Do nothing
}

///|
pub fn make_mute_logger() -> MuteLogger {
  MuteLogger::{  }
}