【问题标题】:What is wrong with this Haskell? "Parse error on input '='"这个 Haskell 有什么问题? “输入'='解析错误”
【发布时间】:2011-05-08 23:21:53
【问题描述】:

我不断收到此错误消息,但我不明白为什么:

src\Parsing.hs:21:18: parse error on input `='

它来自这条线:

tokens  = map strip $ splitWhen (== delimiter) line

我的代码:

tokenize :: String -> HashMap String String
tokenize line = 
   let (delimiter, fieldOrder) = delimiterAndFieldOrderFor line
           tokens  = map strip $ splitWhen (== delimiter) line
   in Map.fromList $  zip fieldOrder tokens

delimiterAndFieldOrderFor :: String -> (Char, [String])
delimiterAndFieldOrderFor line    
       | isInfixOf "," line = (',', ["LastName", "FirstName", "Gender", "FavoriteColor", "BirthDate"])    
       | isInfixOf "|" line = ('|', ["LastName", "FirstName", "Ignored", "Gender", "FavoriteColor", "BirthDate"])    
       | otherwise          = (' ', ["LastName", "FirstName", "Ignored", "Gender", "BirthDate", "FavoriteColor"])

感谢您的帮助!

【问题讨论】:

  • 我开始认为常见问题解答应该说“解析错误?缩进。类型错误?删除您的显式签名。”不是作为个人的刺拳,​​亚历克斯,但这些问题出现了很多,我认为 SO 没有一个很好的系统来讨论社区问题。
  • 是的。我什至试图修复缩进。我花了一段时间才意识到 Leksah 正在改变缩进,保存!所以......双重混乱。

标签: haskell syntax indentation


【解决方案1】:

缩进。

在第 4 行,tokens 的缩进深度应与以(delim... 开头的括号相同。例如

tokenize line = 
   let (delimiter, fieldOrder) = delimiterAndFieldOrderFor line
       tokens  = map strip $ splitWhen (== delimiter) line
   in Map.fromList $  zip fieldOrder tokens

您也可以考虑使用where 子句:

tokenize line = Map.fromList $ zip f tokens
   where
       (sep, f) = delimiterAndFieldOrderFor line
       tokens   = map strip $ splitWhen (== sep) line

就风格而言,那些很长的变量名称有点令人困惑,IMO。

【讨论】:

  • 我刚刚意识到 Leksah 一直在改变缩进。如果我在 Notepad++ 中更改文件,那么它运行良好。很奇怪。
【解决方案2】:

您在这段代码中有额外的缩进:

let (delimiter, fieldOrder) = delimiterAndFieldOrderFor line
       tokens  = map strip $ splitWhen (== delimiter) line
in Map.fromList $  zip fieldOrder tokens

这会导致编译器将该行视为其上一行的表达式的延续。应该是

let (delimiter, fieldOrder) = delimiterAndFieldOrderFor line
    tokens  = map strip $ splitWhen (== delimiter) line
in Map.fromList $  zip fieldOrder tokens

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2015-03-14
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    相关资源
    最近更新 更多