Haskell换行,怎么样?

Haskell newline, how?

我遇到了以下代码的问题。它应该是一种字典,首先询问德语单词,而不是巴伐利亚单词,并将两者都保存在 .txt 文件中。然后是下一对的换行符。当您停止输入新单词时程序终止。更新: 换行符“/n”不起作用。我该如何解决?

 main :: IO ()
 main = do
  putStrLn "Deutsches Wort: "
  deutsch <-getLine
   if  deutsch  /= []
    then do
    putStrLn "Bayerisches Wort: "
    bayerisch <- getLine
    appendFile "woerterbuch.txt" (deutsch++ " "++ bayerisch++ " /n")
    putStrLn (deutsch ++ " ist auf bayerisch " ++ bayerisch)
    main
  else return()

这是我的做法。

import System.IO
import System.Environment
import Control.Monad

main :: IO ()
main = do
  (fileName:_) <- getArgs
  unless (null fileName) $ 
    withFile fileName WriteMode makeDictionary
  where    
    makeDictionary :: Handle -> IO()
    makeDictionary h = do
      putStrLn "Deutsches Wort: "
      deutsch <-getLine
      if not . null $ deutsch
        then do
          hPutStr h $ deutsch++" "
          putStrLn "Bayerisches Wort: "
          bayerisch <- getLine
          hPutStrLn h bayerisch
          putStrLn (deutsch ++ " ist auf bayerisch " ++ bayerisch)
          makeDictionary h
        else return()

你的修改版本看起来应该可以,但这里的优点是文件不会被重复打开和关闭。尽管我不确定 GHC 是否足够聪明,可以在您的情况下保持打开状态。此外,通常最好使用 null 检查空字符串而不是与空列表进行比较。

根据 chepner 的评论进行了编辑。