{-# LANGUAGE TypeFamilies, FlexibleInstances #-}
module Simulation.Aivika.Branch.Ref.Base.Lazy () where
import Simulation.Aivika.Trans.Internal.Types
import Simulation.Aivika.Trans.Comp
import Simulation.Aivika.Trans.Simulation
import Simulation.Aivika.Trans.Ref.Base.Lazy
import Simulation.Aivika.Branch.Internal.BR
import qualified Simulation.Aivika.Branch.Internal.Ref.Lazy as R
instance MonadRef (BR IO) where
newtype Ref (BR IO) a = Ref { forall a. Ref (BR IO) a -> Ref a
refValue :: R.Ref a }
{-# INLINE newRef #-}
newRef :: forall a. a -> Simulation (BR IO) (Ref (BR IO) a)
newRef = (Ref a -> Ref (BR IO) a)
-> Simulation (BR IO) (Ref a) -> Simulation (BR IO) (Ref (BR IO) a)
forall a b.
(a -> b) -> Simulation (BR IO) a -> Simulation (BR IO) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ref a -> Ref (BR IO) a
forall a. Ref a -> Ref (BR IO) a
Ref (Simulation (BR IO) (Ref a) -> Simulation (BR IO) (Ref (BR IO) a))
-> (a -> Simulation (BR IO) (Ref a))
-> a
-> Simulation (BR IO) (Ref (BR IO) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Simulation (BR IO) (Ref a)
forall a. a -> Simulation (BR IO) (Ref a)
R.newRef
{-# INLINE readRef #-}
readRef :: forall a. Ref (BR IO) a -> Event (BR IO) a
readRef (Ref Ref a
r) = Ref a -> Event (BR IO) a
forall a. Ref a -> Event (BR IO) a
R.readRef Ref a
r
{-# INLINE writeRef #-}
writeRef :: forall a. Ref (BR IO) a -> a -> Event (BR IO) ()
writeRef (Ref Ref a
r) = Ref a -> a -> Event (BR IO) ()
forall a. Ref a -> a -> Event (BR IO) ()
R.writeRef Ref a
r
{-# INLINE modifyRef #-}
modifyRef :: forall a. Ref (BR IO) a -> (a -> a) -> Event (BR IO) ()
modifyRef (Ref Ref a
r) = Ref a -> (a -> a) -> Event (BR IO) ()
forall a. Ref a -> (a -> a) -> Event (BR IO) ()
R.modifyRef Ref a
r
{-# INLINE equalRef #-}
equalRef :: forall a. Ref (BR IO) a -> Ref (BR IO) a -> Bool
equalRef (Ref Ref a
r1) (Ref Ref a
r2) = (Ref a
r1 Ref a -> Ref a -> Bool
forall a. Eq a => a -> a -> Bool
== Ref a
r2)
instance MonadRef0 (BR IO) where
{-# INLINE newRef0 #-}
newRef0 :: forall a. a -> BR IO (Ref (BR IO) a)
newRef0 = (Ref a -> Ref (BR IO) a) -> BR IO (Ref a) -> BR IO (Ref (BR IO) a)
forall a b. (a -> b) -> BR IO a -> BR IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ref a -> Ref (BR IO) a
forall a. Ref a -> Ref (BR IO) a
Ref (BR IO (Ref a) -> BR IO (Ref (BR IO) a))
-> (a -> BR IO (Ref a)) -> a -> BR IO (Ref (BR IO) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> BR IO (Ref a)
forall a. a -> BR IO (Ref a)
R.newRef0