keyboard: term `map` is too generic
keyboard: separate concerns