ribosome-0.4.0.0: lib/Ribosome/Internal/IO.hs
module Ribosome.Internal.IO where
import Control.Concurrent (forkIO)
import Control.Monad.Trans.Resource (runResourceT)
import Neovim.Context.Internal (Config(..), Neovim(..), retypeConfig, runNeovim)
import qualified Control.Monad.Reader as ReaderT
retypeNeovim :: (e0 -> e1) -> Neovim e1 a -> Neovim e0 a
retypeNeovim transform thunk = do
env <- Neovim ReaderT.ask
liftIO $ runReaderT (withReaderT (newEnv env) $ runResourceT $ unNeovim thunk) env
where
newEnv = retypeConfig . transform . customConfig
forkNeovim :: Neovim e () -> Neovim e ()
forkNeovim thunk = do
env <- Neovim ReaderT.ask
_ <- liftIO $ forkIO $ void $ runNeovim env thunk
return ()