packages feed

prelate-0.1.0.0: lib/Prelate/Atomic.hs

module Prelate.Atomic where

import Incipit (AtomicState, Member, Sem, atomicGets, atomicModify')
import Lens.Micro (Lens', (.~))
import Lens.Micro.Extras (view)

atomicSet ::
  Member (AtomicState s) r =>
  Lens' s a ->
  a ->
  Sem r ()
atomicSet l a =
  atomicModify' (l .~ a)

atomicView ::
  Member (AtomicState s) r =>
  Lens' s a ->
  Sem r a
atomicView l =
  atomicGets (view l)