pub hkt Monad[T] { fn map(m: fn (from: A) => B): T fn flat_map(m: fn (from: A) => T): T }