嵌套 if/do 块中的解析错误

use*_*063 0 haskell

defaultFileName :: [Char]
defaultFileName = "Test.log"

defaultSearchName :: String
defaultSearchName = "xyz"
Run Code Online (Sandbox Code Playgroud)

可以编译此代码:

a3 :: Int -> [[Char]] -> IO [Char]
a3 index arg = 
  if null arg
    then do
      a <- putStrLn "No parameters have been passed."
      a <- putStrLn $ "1 Default search string: " ++ defaultSearchName
      a <- putStrLn ("2 Default file name: " ++ defaultFileName)
      return defaultFileName
    else return (arg!!index)
Run Code Online (Sandbox Code Playgroud)

一旦我添加了一个额外的 IF-THEN-ELSE,我就不能再编译它了

a3 :: Int -> [[Char]] -> IO [Char]
a3 index arg = 
  if null arg
    then do
      a <- putStrLn "No parameters have been passed."
      a <- putStrLn $ "1 Default search string: " ++ defaultSearchName
      a <- putStrLn ("2 Default file name: " ++ defaultFileName)
      if index == 0
        then  return defaultSearchName
        else return defaultFileName
    else return (arg!!index)
Run Code Online (Sandbox Code Playgroud)

为什么????每走一步都那么令人沮丧。

pha*_*dej 5

你的代码编译得很好。你确定你没有作为缩进在那里交错的制表符和空格吗?

尝试 ghci -fwarn-tabs yourfile.hs