Haskell do块中的模糊分析错误消息

Haskell do块中的模糊分析错误消息,haskell,io,whitespace,Haskell,Io,Whitespace,寒假期间,我致力于学习哈斯克尔。我已经编写了一个程序,它接收单词,将它们放入一个二叉搜索树中,然后搜索该树。这是一个处理获取单词并将其发送给搜索的函数。GHCi告诉我线路上有一个解析错误 putStrLn$search_term++”在树中:“++(显示结果) 完整错误消息: main.hs:40:30:输入“putStrLn”时解析错误(40是上面一行的行号) 但是,这一行与上面的let表达式在同一列中开始,因此我不确定解析错误来自何处,并且错误消息没有比这更有用。更重要的是,我试着检查上面几

寒假期间,我致力于学习哈斯克尔。我已经编写了一个程序,它接收单词,将它们放入一个二叉搜索树中,然后搜索该树。这是一个处理获取单词并将其发送给搜索的函数。GHCi告诉我线路上有一个解析错误

putStrLn$search_term++”在树中:“++(显示结果)

完整错误消息:
main.hs:40:30:输入“putStrLn”时解析错误
(40是上面一行的行号)

但是,这一行与上面的let表达式在同一列中开始,因此我不确定解析错误来自何处,并且错误消息没有比这更有用。更重要的是,我试着检查上面几行的空白,据我所知,它有相同类型的空白。我猜这是我不熟悉的Haskell重要空格中令人讨厌的部分。有什么想法吗?(代码如下)

搜索树::树字符串->IO()
搜索树t=do
putStrLn“搜索:”
搜索术语布尔
不为空=\s->长度s/=0

来自@bheklillr的评论解决了这个问题。我应该写信的

then do
       let result = ...

这立刻解决了问题。谢谢

检查本文:
then
子句中的表达式语法不正确。如果是
,那么就执行{let result=…;putStrLn…}
?遗憾的是,GHC的解析器给出的错误消息比它的类型检查器要糟糕得多。这大约是这个课程的标准。它似乎只有一些可用的错误消息,而您可能遇到的大多数错误消息都是“出于某种原因,我无法解析它,我不知道为什么”的变体。
then do
       let result = ...