gpt4 book ai didi

haskell - xmonad 提示符下的简单计算器

转载 作者:行者123 更新时间:2023-12-02 16:56:43 25 4
gpt4 key购买 nike

我有一个使用 xmonad 的 XMonad.Prompt.Input 的新想法。我认为如果可以制作一个简单的计算器来计算用户输入的内容并在下一个提示的文本中返回结果,当用户按转义键时完成,那就太酷了……问题是,我不这样做非常知道如何处理类型...

到目前为止我有这个:

runAndGetOutput cmd = do
(_, pout, _, phandle) <- runInteractiveCommand cmd
waitForProcess phandle
a <- hGetContents pout
return a

calcPrompt :: XPConfig -> String -> X ()
calcPrompt c ans =
inputPrompt c ans ?+ \ next ->
calcPrompt c (runAndGetOutput ("calc" ++ next))

这不起作用。我得到:

Couldn't match expected type `[Char]' with actual type `IO String'
Expected type: String
Actual type: IO String
In the return type of a call of `runAndGetOutput'
In the second argument of `calcPrompt', namely
`(runAndGetOutput ("calc" ++ next))'

我确实知道这与 runAndGetOutput 返回 IO 字符串这一事实有关,并且我需要一个来自 import XMonad.Prompt.Input 的 inputPrompt 的普通字符串。但我不知道如何处理......

非常感谢您的帮助!

编辑:现在我有这个:

runAndGetOutput :: String -> IO String
runAndGetOutput cmd = do
(_, pout, _, phandle) <- runInteractiveCommand cmd
a <- hGetContents pout
waitForProcess phandle
return a

calcPrompt :: XPConfig -> String -> X ()
calcPrompt c ans =
inputPrompt c ans ?+ \next ->
liftIO (runAndGetOutput ("echo -n " ++ next)) >>= calcPrompt c

可以编译,但无法按预期工作。我可以打开提示符,输入一些文本,然后启动 shell 命令,但随后它只是丢弃 stdo 值,而不是将其用作新的提示文本。

我希望带有 echo 的版本执行以下操作:当我打开提示时,会显示一些默认字符串。当我输入一个值并按回车键时,另一个提示将打开,其中包含先前输入的值(感谢 echo,它只返回它所得到的值)。如果它与 echo 一起工作,我会用一些 bash 脚本替换 echo 来执行计算并返回结果而不是 echo。

最近编辑:终于解决了。我的小计算片段的最终代码在我的 self 回答中:)谢谢大家。

最佳答案

您应该使用 XMonad.Util.Run 中提供的功能,它负责一些特定于 xmonad 的细节(我认为是一些信号处理)。

关于haskell - xmonad 提示符下的简单计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8643272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com