open-witness-0.5: src/Data/OpenWitness/Witnessed.hs
module Data.OpenWitness.Witnessed
( Witnessed
, unWitnessed
, newWitnessed
, WitnessedIORef
, newWitnessedIORef
) where
import Data.IORef
import Data.OpenWitness
import Data.Type.Equality
import Prelude
data Witnessed f a =
MkWitnessed (IOWitness a)
(f a)
unWitnessed :: Witnessed f a -> f a
unWitnessed (MkWitnessed _ fa) = fa
instance TestEquality (Witnessed f) where
testEquality (MkWitnessed wa _) (MkWitnessed wb _) = testEquality wa wb
newWitnessed :: f a -> IO (Witnessed f a)
newWitnessed fa = do
wit <- newIOWitness
return $ MkWitnessed wit fa
type WitnessedIORef = Witnessed IORef
newWitnessedIORef :: a -> IO (WitnessedIORef a)
newWitnessedIORef a = do
ref <- newIORef a
newWitnessed ref