{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE DataKinds, PolyKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Data.IORef.ToolsYj (newDefaultIORef, checkFlag) where

import Data.Default
import Data.Bool
import Data.IORef

newDefaultIORef :: Default a => IO (IORef a)
newDefaultIORef :: forall a. Default a => IO (IORef a)
newDefaultIORef = a -> IO (IORef a)
forall a. a -> IO (IORef a)
newIORef a
forall a. Default a => a
def

checkFlag :: IORef Bool -> IO Bool
checkFlag :: IORef Bool -> IO Bool
checkFlag IORef Bool
flg =
	IORef Bool -> IO Bool
forall a. IORef a -> IO a
readIORef IORef Bool
flg IO Bool -> (Bool -> IO Bool) -> IO Bool
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= IO Bool -> IO Bool -> Bool -> IO Bool
forall a. a -> a -> Bool -> a
bool (Bool -> IO Bool
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False) (Bool
True Bool -> IO () -> IO Bool
forall a b. a -> IO b -> IO a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ IORef Bool -> Bool -> IO ()
forall a. IORef a -> a -> IO ()
writeIORef IORef Bool
flg Bool
False)