Haskell:“'do'结构中的最后一个语句必须是一个表达式”

时间:2011-12-29 05:43:43

标签: haskell

我正在阅读这本书Natural Language Processing for Working Programmers。这本书使用了Haskell,我没有太多的经验。下面的代码在GHCI中引发错误

:{
do
  l <- [0..9]
  ps <- (\x -> [x-1, x+2]) l
  return ps
:}

这是返回的错误消息

The last statement in a 'do' construct must be an expression

我遇到的所有答案似乎都暗示这是一个缩进错误,但据我所知,缩进似乎是正确的。任何想法可能是什么问题?

2 个答案:

答案 0 :(得分:4)

我将您的代码输入到ghci 7.0.3中并且没有出错。

Prelude> :{
Prelude| do
Prelude|   l <- [0..9]
Prelude|   ps <- (\x -> [x-1, x+2]) l
Prelude|   return ps
Prelude| :}
[-1,2,0,3,1,4,2,5,3,6,4,7,5,8,6,9,7,10,8,11]

编辑:当我在Ubuntu 10.04中使用ghci 6.12.1时,我会遇到与您相同的错误。

答案 1 :(得分:0)

:{:}的符号不是Haskell的一部分,我认为这与您正在阅读的文本有关。此外,您发布的代码有一个lambda用作列表monad。试试这个:

do
  l <- [0..9]
  ps <- (\x -> [x-1, x+2]) l
  return ps