haskell - Haskell 终端输入中的可编辑默认字符串

标签 haskell

我希望能够提示用户输入(比如 FilePath),但也希望提供一个 mutable/interactive 字符串作为默认值,所以改为让用户键入完整路径,我可以提示:

C:\Users\John\project\test

并让他们能够退格 4 次并输入 final 以生成 C:\Users\John\project\final,而不是键入整个路径。

然而,使用 putStrSystem.IO.hPutStr stdout 打印默认字符串确实将此默认字符串打印到终端,但不允许我来改变其中的任何一个。例如

import System.IO

main = do
  hSetBuffering stdout NoBuffering
  putStr "C:\\Users\\John\\project\\test"
  l <- getLine
  doSomethingWith l

我怀疑 Data.Text.IOinteract 可以做我想做的事,但我无法让它工作。

如有任何建议,我们将不胜感激。

最佳答案

getLine 不提供任何行编辑功能。为此,您可以使用类似 haskeline 的库相反,例如:

import System.Console.Haskeline

main :: IO ()
main = do
  runInputT defaultSettings $ do
    mInput <- getInputLineWithInitial "Enter path: "
      ("C:\\Users\\John\\project\\test", "")
    case mInput of
      Nothing -> do
        outputStrLn "No entry."
      Just input -> do
        outputStrLn $ "Entry: " ++ show input

另一种方法是使用提供行编辑的包装器调用程序,例如 rlwrap .为了构建更复杂的全屏文本 UI,还有 brick ,它在 Brick.Widgets.Edit 中提供了一个简单的文本编辑组件。

关于haskell - Haskell 终端输入中的可编辑默认字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71851486/

相关文章:

Haskell:定义严格的数据

haskell - 为什么 .hs 文件中的 "(2+2.0)"双倍,而 GHCi 中的 "Fractional a => a"?

haskell - 与 Applicative 相比,Monad 给了我们什么优势?

haskell - 如何可靠地确定 Handle 是否是 Haskell 中的终端?

haskell - 如何使用 State monad 计算 Haskell 列表中偶数的个数?

javascript - 'map' ping multiple lists有名称吗?

arrays - 在haskell中打印二维数组

programming-languages - 当我想编写视频处理应用程序时,是否有合适的 C++ 替代品?

scala - Total Collections,拒绝不包括所有可能性的类型的集合

haskell - 如果我知道(或合理预期)IO 操作是引用透明的,我可以对其使用 unsafePerformIO 吗?或者还有其他条件吗?