As a bonus, it's clear where to enforce invariants and fail early:
newMovement(board', K, E3) => Illegal Movement (Can't move to E3)
newMovement(board'', K, E2) => Illegal Movement (White King not available on board)
apply(board''', randomMovement) => Illegal Play
E.g.:
Applied to finance: Applied to chess: As a bonus, it's clear where to enforce invariants and fail early: