【问题标题】:haskell-mode prints "*Main>" on same line after using putChar?使用 putChar 后,haskell-mode 在同一行打印“* Main>”?
【发布时间】:2012-08-02 00:33:33
【问题描述】:

代码:

main = do
  putChar 't'
  putChar 'e'
  putChar 'h'

当我运行上述代码时,我得到了

*Main> main
teh*Main>

但我期待

*Main> main
teh
*Main>

我的问题:为什么是 teh*Main 而不是 teh 然后 *Main 在另一行?

我正在使用带有 haskell 模式的 emacs23。

【问题讨论】:

  • “因为没有换行符” :P~ (现在谁来负责..是个问题。)
  • @pst:所以,我只能接受它,还是?
  • 好吧,你总是可以编辑.el,或者可能有一个设置..我不使用haskell(或相关模式),虽然:-)其他方法可能只是放一个换行符(\n 应该足够了)或通过 putStrLn 强制它。

标签: haskell emacs haskell-mode


【解决方案1】:

putChar c 只将那个字符写入控制台。这就是它的目的。因此,除非您之后将换行符打印到控制台,否则无论是使用putCharputStr 还是其他任何方法,以下输出都会转到同一行。行为与 C 相同,或者如果您 cat 一个没有尾随换行符的文件。它无处不在。唯一可行的替代方法(检查每个输出是否以换行符结尾是不可行的)是在 ghci 或 shell 提示符之前无条件地输出换行符,这会导致许多烦人的空行。

【讨论】:

    【解决方案2】:

    如果它真的困扰你,你总是可以定义

    putCharLn :: Char -> IO ()
    putCharLn c = do putChar c
                     putChar '\n'
    

    定义main 喜欢:

    main = do putChar 't'
              putChar 'e'
              putCharLn 'h'
    

    现在:

    *Main> main
    teh
    *Main> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2012-04-26
      • 1970-01-01
      • 2019-05-12
      • 2011-06-20
      • 1970-01-01
      相关资源
      最近更新 更多