linenoise-0.3.0: src/Linenoise/Unlift.hs
-- | Unlifted versions of all FFI methods.
module Linenoise.Unlift
( InputResult (..)
, addHistory
, clearScreen
, getInputLine
, historyLoad
, historySave
, printKeycodes
, setCompletion
, setMultiline
, stifleHistory
) where
import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.IO.Unlift (MonadUnliftIO, withRunInIO)
import Data.Text (Text)
import Data.Text.Encoding (decodeUtf8, encodeUtf8)
import Linenoise.FFI (InputResult (..))
import qualified Linenoise.FFI as FFI
-- | Add to current history.
addHistory :: MonadIO m => Text -> m ()
addHistory = liftIO . FFI.addHistory . encodeUtf8
-- | Clear the screen.
clearScreen :: MonadIO m => m ()
clearScreen = liftIO FFI.clearScreen
-- | Run the prompt, yielding a string.
getInputLine :: MonadIO m => Text -> m (InputResult Text)
getInputLine = liftIO . fmap (fmap decodeUtf8) . FFI.getInputLine . encodeUtf8
-- | Load history from a file.
historyLoad :: MonadIO m => FilePath -> m ()
historyLoad = liftIO . FFI.historyLoad
-- | Save history to a file.
historySave :: MonadIO m => FilePath -> m ()
historySave = liftIO . FFI.historySave
-- | Print keycodes.
printKeycodes :: MonadIO m => m ()
printKeycodes = liftIO FFI.printKeycodes
-- | Set the current completion function.
setCompletion :: MonadUnliftIO m => (Text -> m [Text]) -> m ()
setCompletion f =
let g = fmap (fmap encodeUtf8) . f . decodeUtf8
in withRunInIO (\runInIO -> FFI.setCompletion (runInIO . g))
-- | Enable/Disable multiline input.
setMultiline :: MonadIO m => Bool -> m ()
setMultiline = liftIO . FFI.setMultiline
-- | Limit the maximum history length.
stifleHistory :: MonadIO m => Int -> m ()
stifleHistory = liftIO . FFI.stifleHistory