packages feed

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 ()