rchain / rchain

Blockchain (smart contract) platform using CBC-Casper proof of stake + Rholang for concurrent execution.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Replace AtomicMonadState with Ref

tgrospic opened this issue · comments

Overview

The purpose of custom definition AtomicMonadState is the same as built in Ref type available in cats effect library.

class AtomicMonadState[F[_]: Sync, S](state: Atomic[S])(implicit val monad: Monad[F])
extends MonadState[F, S] {
def get: F[S] = Sync[F].delay(state.get)
def set(s: S): F[Unit] = Sync[F].delay(state.set(s))
def inspect[A](f: S => A): F[A] = Sync[F].delay(f(state.get))
def modify(f: S => S): F[Unit] = Sync[F].delay(state.transform(f))
}

We can replace existing use with Ref and remove custom implementation.