parse error in nested if/do blocks [closed]

混江龙づ霸主 提交于 2020-01-07 03:47:05

问题


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

defaultSearchName :: String
defaultSearchName = "xyz"

This code can be compiled:

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)

once I add an extra IF-THEN-ELSE, I cannot compile it anymore

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)

why???? It is so frustrating with every single step.


回答1:


Your code compiles fine. Are you sure you don't have tabs and spaces interleaved there as an indentation?

Try ghci -fwarn-tabs yourfile.hs



来源:https://stackoverflow.com/questions/35060673/parse-error-in-nested-if-do-blocks

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!