-- |
-- SPDX-License-Identifier: BSD-3-Clause
--
-- Ensures that access to an 'IORef' is read-only
-- by hiding behind a newtype.
module Swarm.ReadableIORef (mkReadonly, ReadableIORef, readIORef) where

import Data.IORef (IORef)
import Data.IORef qualified as R (readIORef)

newtype ReadableIORef a = ReadableIORef (IORef a)

mkReadonly :: IORef a -> ReadableIORef a
mkReadonly :: forall a. IORef a -> ReadableIORef a
mkReadonly = forall a. IORef a -> ReadableIORef a
ReadableIORef

readIORef :: ReadableIORef a -> IO a
readIORef :: forall a. ReadableIORef a -> IO a
readIORef (ReadableIORef IORef a
ref) = forall a. IORef a -> IO a
R.readIORef IORef a
ref