【问题标题】:Haskell ::Couldn't match type `Char' with `[Char]'Haskell ::无法将“Char”类型与“[Char]”匹配
【发布时间】:2022-01-23 15:07:37
【问题描述】:

我想要一个在遇到空行时取行并打印反向的程序。 这是我的代码。

back :: IO()
back = do
  line <- getLine 
  if (not $ null line) then do
  mapM_ putStrLn (reverse line)
  else return()

当我尝试运行它时,它会报错。

* Couldn't match type `Char' with `[Char]'
      Expected: [String]
        Actual: [Char]
    * In the second argument of `mapM_', namely `(reverse line)'
      In a stmt of a 'do' block: mapM_ putStrLn (reverse line)
      In the expression: do mapM_ putStrLn (reverse line)
  |
6 |     mapM_ putStrLn(reverse line)
  |                    ^^^^^^^^^^^^

这里出了什么问题?

【问题讨论】:

    标签: string haskell functional-programming


    【解决方案1】:

    lineString。由于您使用mapM_ putStrLn,它需要一个字符串列表,所以mapM_ putStrLn :: [String] -&gt; IO ()

    如果您想反转每一行,还是反转行本身,这并不完全清楚。如果是前者,您可以使用:

    back :: IO()
    back = do
      line <- getLine 
      if not (null line) then do
        putStrLn (reverse line)
        back
      else return()

    如果是后者,你可以使用递归,首先递归调用back,然后然后打印该行:

    back :: IO()
    back = do
      line <- getLine 
      if not (null line) then do
        back
        putStrLn line
      else return()

    【讨论】:

      猜你喜欢
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      • 2014-08-30
      相关资源
      最近更新 更多