这是我的代码:
main = do
contents <- getContents
let threes = groupsOf 3 (map read $ lines contents)
where groupsOf 0 _ = []
groupsOf _ [] = []
groupsOf n xs = take n xs : groupsOf n (drop n xs)
putStrLn $ show threes
当我将文本文件输入输入时运行此操作时,我得到:
test.hs:4:13: parse error on input `groupsOf'
不确定我在这里做错了什么。据我所知,我的语法是正确的......
答案 0 :(得分:2)
您提出了很多语法问题。
contents = <- getContents
这是无效的,应该是contents <- getContents
。
let threes = groupsOf 3 (map read $ lines contents)
where groupsOf 0 _ = []
在没有进一步缩进的情况下,您不能在let子句之后拥有where
。你可以将where
子句移动到函数之后,在一个let子句中声明groupsOf
,或者将where
稍微缩进let子句中变量的缩进:< / p>
let threes = groupsOf 3 (map read $ lines contents)
groupsOf 0 _ = []
groupsOf _ [] = []
groupsOf n xs = take n xs : groupsOf n (drop n xs)
编辑:在参考Haskell 2010报告后,我不认为let { decls } where {decls}
实际上是有效的Haskell。 GHC解析表达式,我认为这些表达式在某些情况下是合法且好的,尽管这里的风格很糟糕。