【发布时间】:2015-01-05 15:42:40
【问题描述】:
我想知道右击或左击按钮的区别。我写了以下代码:
import Graphics.UI.Gtk
import Control.Monad.IO.Class
--main::IO()
main = do
initGUI
window <- windowNew
button <- buttonNewWithLabel "button"
on button buttonPressEvent (tryEvent (do button <- eventButton
liftIO (extrafunctie button)
))
containerAdd window button
onDestroy window mainQuit
widgetShowAll window
mainGUI
extrafunctie b = if (RightButton == b)
then putStrLn "True"
else putStrLn "False"
我收到以下错误:
jolien@jolien-VirtualBox:~/Documenten/haskell$ ghc --make test.hs -o test
[1 of 1] Compiling Main ( test.hs, test.o )
test.hs:9:50:
The last statement in a 'do' block must be an expression
button <- eventButton liftIO (extrafunctie button)
我查看了我的缩进,这是正确的。有人知道解决方案吗?
【问题讨论】:
-
这看起来确实像一个缩进问题。你检查过制表符吗? IIRC Haskell 将它们解释为“标签到下一个 8 个空格的倍数”,也许您的编辑器会有所不同。
-
button <- eventButton;:D -
使用
ghc进行检查,就缩进而言,您在此处粘贴的代码似乎没问题,因此可能有一些不可见的字符和/或像@Tarmil 建议的标签。我怀疑代码没有正确粘贴到问题中。 -
仅供参考 StackOverflow 引擎在将 MarkDown 源呈现为 HTML 时会将制表符转换为四个空格,但是当您单击“编辑”并查看原始源时,那里有制表符。
-
@JoJoD 它之所以有效,是因为缩进是一种隐含的
{、;和},如果你愿意,你可以明确地给出它们。问题是缩进,如果您将编辑器的制表位设置为 8,或者将所有制表符替换为空格,您就可以看到它。见stackoverflow.com/a/27714157/1598537
标签: haskell expression