Haskell中的`putStrLn`的基本错误。VScode扩展Haskelly

Shi*_*ond 0 haskell visual-studio-code haskell-stack

main = do line <- getLine
        let line' = reverse line
        putStrLn $ "You said " ++ line' ++ " backwards!"
        putStrLn $ "Yes, you really said " ++ line ++ " backwards!"
Run Code Online (Sandbox Code Playgroud)

错误:

$ stack runhaskell "c:\Users\FruitfulApproach\Desktop\Haskell\test.hs"

C:\Users\FruitfulApproach\Desktop\Haskell\test.hs:4:5: error:
    parse error on input `putStrLn'
  |
4 |     putStrLn $ "You said " ++ line' ++ " backwards!"
  |     ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我也尝试过在缩进线上使用单个选项卡。

这是我的标签->空格设置:

制表符到空格设置屏幕截图

我也尝试过重新启动VSCode。

提前致谢!

And*_*Ray 5

我认为您的代码缩进不足。尝试这个:

main = do line <- getLine
          let line' = reverse line
          putStrLn $ "You said " ++ line' ++ " backwards!"
          putStrLn $ "Yes, you really said " ++ line ++ " backwards!"
Run Code Online (Sandbox Code Playgroud)

具体来说,do应该紧跟在您之后的行与紧随其后的行缩进line <- getLine

  • 问题是,缩进的`let`不是`do`块的一部分,而是紧随其后的。然后,下面的`putStrLn`会被放在期望`in`关键字的位置。 (3认同)