Вы имеете в виду Государственную монаду?
import cats.data.State
val number = 20.0
case class Calculator(num: Double, count: Int)
def state: State[Calculator, Unit] = for {
calculator <- State.get[Calculator]
_ <- State.set(if (calculator.num == 0.0) calculator.copy(num = number) else calculator.copy(num = calculator.num * 10 + number))
} yield ()
state.runS(Calculator(0.0, 0)).value // Calculator(20.0,0)