| 177 | } |
| 178 | |
| 179 | function processBackspace(state: State) { |
| 180 | if (state.cursor <= 0) { |
| 181 | return Effect.succeed(Action.Beep()) |
| 182 | } |
| 183 | const beforeCursor = state.value.slice(0, state.cursor - 1) |
| 184 | const afterCursor = state.value.slice(state.cursor) |
| 185 | const cursor = state.cursor - 1 |
| 186 | const value = `${beforeCursor}${afterCursor}` |
| 187 | return Effect.succeed( |
| 188 | Action.NextFrame({ |
| 189 | state: { ...state, cursor, value, error: Option.none() } |
| 190 | }) |
| 191 | ) |
| 192 | } |
| 193 | |
| 194 | function processCursorLeft(state: State) { |
| 195 | if (state.cursor <= 0) { |