# Erlang gen_statem
## Synopsis
- State + Event → State' + Actions
- State transition: handle_event(event, state, data) → {state', data', actions}
- Extra works when state' ≠ state
- Opt-in special event `:enter` for entering a state.
- Force entering the same state using `:repeat_state`.
- Possible actions: Postpone the event to next state, Time-outs, Queue internal events