2011-06-05 65 views
4

来自Haskell学习者的一个非常简单的问题。我正在通过Yet Another Haskell Tutorial工作,我陷入了一个简单的语法练习。下面给出的代码:当我复制并粘贴它(从pdf),然后调整缩进它工作正常,但是当我将它输入到编辑器(在我的情况下记事本++),然后它会引发以下错误:Haskell:初学者的语法问题

Guess.hs:8:9: parse error on input ´hSetBuffering´ 

我确信我没有混合制表符和空格(4个空格),并且在书中没有发现错字。我相信这是一个非常简单的错误,所以感谢任何输入。

Nebelhom

下面是代码:

module Main 
    where 

import IO 
import Random 

main = do 
    hSetBuffering stdin LineBuffering 
    num <- randomRIO (1::Int, 100) 
    putStrLn "I'm thinking of a number between 1 and 100" 
    doGuessing num 

doGuessing num = do 
    putStrLn "Enter your guess:" 
    guess <- getLine 
    let guessNum = read guess 
    if guessNum < num 
     then do putStrLn "Too low!" 
       doGuessing num 
    else if read guess > num 
     then do putStrLn "Too high!" 
       doGuessing num 
    else do putStrLn "You Win!" 
+1

我用ghc试过了你的代码,它工作得很好。 – augustss 2011-06-05 19:27:07

+0

你可能想要使用比记事本更先进的东西。我使用记事本++,但有很多其他编辑器在那里被程序员喜爱... – MatrixFrog 2011-06-05 19:59:12

+0

@MatrixFrog:我使用记事本++ ... 我倾向于使用IDE,但我目前使用的笔记本电脑相当慢,所以我坚持不需要资源的程序。例如Eclipse和Netbeans差点杀死了笔记本电脑的性能。 – Nebelhom 2011-06-05 20:41:58

回答

3

有没有语法错误,我可以看到,或重现:

$ ghci A.hs 
GHCi, version 7.0.3: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Loading package ffi-1.0 ... linking ... done. 
[1 of 1] Compiling Main    (A.hs, interpreted) 
Ok, modules loaded: Main. 

,这意味着它可能是标签。你在某处插入了一个标签吗?然后使用4个空格进行缩进?在Haskell中,选项卡通常是一个糟糕的主意,因为它们会导致无意的,无法理解的语法错误。

+1

谢谢!我知道这件事很简单。我总是从4个空格和记事本开始,然后自动缩进选项卡。切换立即; – Nebelhom 2011-06-05 19:48:11

+0

多年来,我一直在使用唯一的选项卡缩进Haskell,Python,C++和bash。 N个制表符表示我想要更清楚的内容(N级缩进)。我永远不会有非整数缩进级别。屏幕上显示的每个制表符(缩进级别)的物理空间量可以在编辑器中进行配置,并且不需要将其硬编码到源文件中,我认为它不属于该文件。 – Prateek 2011-11-30 06:14:27