不変オブジェクトを使ったプログラムを書く時に便利なcase classですが、case classのメリットを生かしつつ副作用を扱うためにはどのような書き方をするのが良いでしょうか。具体的には外部APIやデータベースへのアクセスをcase classを使ってどう実装するのが良いか考えます。 例として次のような簡単なUserクラスを用意します。 case class User(id: Int, name: String) Userの名前を変更するメソッドを追加してみます。これはcopyメソッドを使えば簡単です。ここまではサンプルコードでよく目にするような例です。 case class User(id: Int, name: String) { def rename(name: String): User = copy(name = name) } さて、このユーザー情報をデータベースに保存す