Programação funcional: estado vs. reatribuição

Preciso de ajuda para entender a diferença entre minha atual noção de estado de POO e a maneira como isso seria feito em uma linguagem funcional como Haskell ou Clojure.

Para usar um exemplo hackeado, digamos que estamos lidando com objetos / estruturas de conta bancária simplificados / o que for. Em uma linguagem OOP, eu teria alguma classe segurando uma referência a um BankAccount, que teria variáveis de instância para coisas como taxa de juros e métodos como setInterestRate () que alteram o estado do objeto e geralmente não retornam nada. Por exemplo, Clojure, eu teria uma estrutura de conta bancária (um hashmap glorificado) e funções especiais que pegam um parâmetro de conta bancária e outras informações e retornam uma nova estrutura. Então, em vez de alterar o estado do objeto original, agora tenho um novo sendo retornado com as modificações desejadas.

Então ... o que eu faço com isso? Sobrescrever qualquer variável referente à antiga conta bancária? Em caso afirmativo, isso tem vantagens sobre a abordagem OOP de mudança de estado? No final, nos dois casos, parece que se tem uma variável que referencia o objeto com as alterações necessárias. Retardado como sou, tenho apenas um conceito vago do que está acontecendo.

Espero que tenha feito sentido, obrigado por qualquer ajuda!