{-# language MagicHash #-}

module Control.Monad.IO.Unlifted
  ( IO#(..)
  , lift
  , unlift
  ) where

import GHC.IO (IO(IO))
import Data.Unlifted (IO#(..))

lift :: IO# a -> IO a
lift :: forall a. IO# a -> IO a
lift (IO# State# RealWorld -> (# State# RealWorld, a #)
f) = (State# RealWorld -> (# State# RealWorld, a #)) -> IO a
forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO a
IO State# RealWorld -> (# State# RealWorld, a #)
f

unlift :: IO a -> IO# a
unlift :: forall a. IO a -> IO# a
unlift (IO State# RealWorld -> (# State# RealWorld, a #)
f) = (State# RealWorld -> (# State# RealWorld, a #)) -> IO# a
forall a. (State# RealWorld -> (# State# RealWorld, a #)) -> IO# a
IO# State# RealWorld -> (# State# RealWorld, a #)
f