[#design:promise]
== Promise

The main coroutine type is a `promise`, which is eager.
The reason to default to this, is that the compiler can optimize out
promises that do not suspend, like this:

[source,cpp]
----
cobalt::promise<void> noop()
{
  co_return;
}
----

Awaiting the above operation is in theory a noop,
but practically speaking, compilers aren't there as of 2023.

