{-# LANGUAGE BlockArguments #-}
module Internal.IO
( putText,
putTextLn,
)
where
import Control.Concurrent.MVar
import System.IO.Unsafe (unsafePerformIO)
import Text
import qualified Prelude
{-# NOINLINE stdoutLock #-}
stdoutLock :: MVar ()
stdoutLock :: MVar ()
stdoutLock = IO (MVar ()) -> MVar ()
forall a. IO a -> a
unsafePerformIO (() -> IO (MVar ())
forall a. a -> IO (MVar a)
newMVar ())
putText :: Text -> Prelude.IO ()
putText :: Text -> IO ()
putText Text
text = do
MVar () -> (() -> IO ()) -> IO ()
forall a b. MVar a -> (a -> IO b) -> IO b
withMVar MVar ()
stdoutLock \()
_ ->
String -> IO ()
Prelude.putStr (Text -> String
Text.toList Text
text)
putTextLn :: Text -> Prelude.IO ()
putTextLn :: Text -> IO ()
putTextLn Text
text = do
MVar () -> (() -> IO ()) -> IO ()
forall a b. MVar a -> (a -> IO b) -> IO b
withMVar MVar ()
stdoutLock \()
_ ->
String -> IO ()
Prelude.putStrLn (Text -> String
Text.toList Text
text)