module Ribosome.Test.Input where import Control.Concurrent.Lifted (fork, killThread) import Control.Exception.Lifted (bracket) import Ribosome.Api.Input (syntheticInput) import Ribosome.Control.Monad.Ribo (NvimE) withInput :: NvimE e m => MonadIO m => MonadBaseControl IO m => Maybe Double -> [Text] -> m a -> m a withInput :: Maybe Double -> [Text] -> m a -> m a withInput Maybe Double interval [Text] chars m a thunk = m ThreadId -> (ThreadId -> m ()) -> (ThreadId -> m a) -> m a forall (m :: * -> *) a b c. MonadBaseControl IO m => m a -> (a -> m b) -> (a -> m c) -> m c bracket (m () -> m ThreadId forall (m :: * -> *). MonadBaseControl IO m => m () -> m ThreadId fork m () input) ThreadId -> m () forall (m :: * -> *). MonadBase IO m => ThreadId -> m () killThread (m a -> ThreadId -> m a forall a b. a -> b -> a const m a thunk) where input :: m () input = Maybe Double -> [Text] -> m () forall (m :: * -> *) e. (MonadIO m, NvimE e m) => Maybe Double -> [Text] -> m () syntheticInput Maybe Double interval [Text] chars