- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用 Haskell 编写了一个程序,在当前目录中将吉他谱构建为 txt 文件。它从用户处获取一串和弦,然后构建正确的输出并将其逐行写入文件。
当我使用 getLine 时,我无法在输入中使用退格键,因为它会在屏幕上打印一堆乱码。
我正在尝试使用 haskeline 来解决这个问题,同时我注释掉了大部分主要方法,以便每次更改都需要更少的编辑(我在“main”中注释掉的每个命令的类型与我保留的单个命令,所以如果我能让这个简化版本工作,整个事情应该工作)。基本上,我需要能够使用 haskeline 从用户那里获取输入,但是在执行此操作后,我还需要在“do” block 中运行一些“副作用”命令。
我是 Haskell 的新手,我不完全理解什么是允许的,什么是不允许的,以及为什么。这是我的程序的简化版本:
import Data.List
import System.Console.Haskeline
main = runInputT defaultSettings loop
where
loop :: InputT IO ()
loop = do
name <- getInputLine "Enter name of song: "
case name of
Nothing -> return ()
Just songName -> return ()
chords <- getInputLine "Enter chords to be tabified "
case chords of
Nothing -> do outputStrLn $ "No chords entered. Exiting."
Just chords -> do
writeFile "./test.txt" "did it work?"
return ()
我直接从 Haskeline 教程中获得了所有这些语法。我尝试在不进行任何更改的情况下运行它,并且它起作用了,所以我知道它都是正确的 - 除了 - 我编辑的最后 3 行,其中我有“do” block ,并且尝试在“之前调用”writeFile”返回()”。
我知道“循环”的类型必须是InputT IO ()才能使用getInputLine(getLine的haskeline版本),但我不知道如何完成“副作用”,例如写入文件同时。
当我尝试在 ghci 中加载我的项目时,出现以下错误:
error:
-Couldn't match type 'IO' with 'InputT IO'
Expected type: InputT IO ()
Actual type: IO ()
- In a stmt of a 'd' block: writeFile "./test.txt" "did it work?"
In the expression:
do { writeFile "./test.txt" "did it work?";
return () }
In a case alternative:
Just chords
-> do { writeFile "./test.txt" "did it work?";
return () }
Failed, modules loaded: none.
最佳答案
由于 InputT IO
是 MonadIO
的实例,因此您可以通过将任何 IO 操作提升为 InputT IO
操作来运行,使用
liftIO :: IO a -> InputT IO a
事实上,这是在支持 IO 但不是 IO
的 moand 中“运行 IO”的标准方法。
关于Haskell:如何使用 haskeline 并在同一程序中写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230029/
我正在尝试使用 Haskeline 实现自动完成功能: import System.Console.Haskeline import System.Console.Haskeline.IO impor
我正在尝试使用Haskeline编写一个程序,询问用户一系列问题,每个问题都可以选择在[括号]中包含一个默认值,并读取他们的回答。我希望用户能够 按 Enter 键提交[默认]值; 输入一个字符串,根
cabal sandbox init cabal install haskeline ... installs successfully ... ghci Prelude> :module +Syst
Haskeline 提供了函数 outputStr 和 outputStrLn,它们输出到 stdout,但是有没有办法更新已经输出的文本呢?例如,我正在考虑当安装程序显示当前安装的百分比时——百分比
我用 Haskell 编写了一个程序,在当前目录中将吉他谱构建为 txt 文件。它从用户处获取一串和弦,然后构建正确的输出并将其逐行写入文件。 当我使用 getLine 时,我无法在输入中使用退格键,
我正在使用Haskeline包,我想在做任何事情之前从命令行连续获取三个字符串,并且我想出了对我来说似乎是一个巧妙的解决方案。但我确信可能有更好的方法来做到这一点。我正在寻找使用 Haskeline
我有一个现有程序,它接受命令行参数(用户名、密码、日期),然后使用 Network.HTTP.Conduit 库将 xml 消息发布到服务器。然后我解析结果,做一些工作并使用 blaze-html 写
我想写一个文本界面,提供一些默认的命令。该程序支持这些命令的制表符补全。 该程序还记录用户输入并将其存储在 StateData 中。 .现在我希望这个程序支持这些用户输入的选项卡完成。例如: *Mai
我有代码 main :: IO() main = runInputT defaultSettings loop where
免责声明:我对 Haskell 有点陌生。 我正在编写一个解释器,或者,在这种情况下,一个 REPL。为此,我使用了 haskeline,它非常适合 REPL。它具有在文件中存储命令行历史记录的功能,
鉴于下面的概念验证代码,我希望能够以某种方式执行我的 foo 函数,并能够输出字符串 Paul! 以及以下可能性:在 InputT monad-transformer 中获取其返回值,而无需在 run
我在运行 Eclipse 3.7.2 和 ghc(i) 7.4.1 的 Ubuntu 12.04 机器上安装了 EclipseFP,Eclipse 的 Haskell 插件。每次我启动 Eclipse
我是一名优秀的程序员,十分优秀!