I can understand why a callback module must provide `init` and `handle_call` functions. `init` is for creating the initial state, and `handle_call` is the main purpose for creating a server process: to serve requests.

But I don't understand why `handle_cast` is required. Couldn't `gen_server` module provide a default implementation, like it does for many other callbacks? It could be a noop like

```
handle_cast(_, State) -> {noreply, State}.

```

It seems to me that the majority of callback modules provide noops like this one anyway.