输入"="错误时出现解析错误

cho*_*ean 1 haskell

import Data.Char (digitToInt)

let f [] = []
     f ('\n':',':a) = f ('\n' : a)  
     f (a:b) = a : f b

main :: IO ()

main = do
     ln<-getLine
     f ln
     print dp
Run Code Online (Sandbox Code Playgroud)

在输入`='上得到解析错误

为什么会这样?

GS *_*ica 5

在Haskell源文件中,顶级定义f不应该用let- 只是写入引入

f [] = []
f ('\n':',':a) = f ('\n' : a)
f (a:b) = a : f b
Run Code Online (Sandbox Code Playgroud)

此外,您需要确保定义中每个子句的左侧在同一列中排列,因为Haskell是缩进感知的.因此,在这种情况下f,每个子句中的每一个应该位于每一行的最开头,如上所述.

请注意,ghci提示的行为更像是在do块中,因此let是有效的,这在两者之间移动时可能会引起混淆.

  • 当然,这是在*文件*中的顶级.在GHCi提示符下,"let"是必需的,这可能是造成混乱的原因.这是GHCi语法基本上在"do block"中的剩余部分,尽管*现在*它支持大多数与文件顶层相同的声明. (2认同)