解析嵌套的if / do块中的错误 [英] parse error in nested if/do blocks

查看:112
本文介绍了解析嵌套的if / do块中的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


defaultSearchName :: String
defaultSearchName =xyz

这段代码可以编译:

  a3 :: Int  - > [[Char]]  - > IO [Char] 
a3 index arg =
如果为null arg
则执行
a< - putStrLn没有参数传递。
a < - putStrLn $1默认搜索字符串:++ defaultSearchName
a < - putStrLn(2默认文件名:++ defaultFileName)
返回defaultFileName
else return(arg !! index)

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

  a3 :: Int  - > [[Char]]  - > IO [Char] 
a3 index arg =
如果为null arg
则执行
a< - putStrLn没有参数传递。
a < - putStrLn $1默认搜索字符串:++ defaultSearchName
a < - putStrLn(2默认文件名:++ defaultFileName)
if index == 0
然后返回defaultSearchName
else返回defaultFileName
else返回(arg !!索引)

为什么????它是每一个步骤都令人沮丧的。 你的代码编译得很好。您确定您没有制表符和空格作为缩进交错吗?



尝试 ghci -fwarn-tabs yourfile.hs


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.

解决方案

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

这篇关于解析嵌套的if / do块中的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆