【问题标题】:Haskell: Beginner syntax questionHaskell:初学者语法问题
【发布时间】:2011-06-05 19:16:14
【问题描述】:

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

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

我确保我没有混合制表符和空格(4 个空格),并且我没有在书中找到错字。我确信这是一个非常简单的错误,因此感谢您的任何意见。

尼伯霍姆

代码如下:

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!"

【问题讨论】:

  • 我用 ghc 试过你的代码,效果很好。
  • 您可能想要使用比记事本更高级的东西一点。我使用记事本++,但还有很多其他深受程序员喜爱的编辑器...
  • @MatrixFrog:我使用 Notepad++ ...我倾向于使用 IDE,但我目前使用的笔记本电脑相当慢,所以我坚持使用不占用资源的程序。例如,Eclipse 和 Netbeans 几乎扼杀了笔记本电脑的性能。

标签: haskell syntax indentation


【解决方案1】:

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

$ 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 中,制表符通常不是一个好主意,因为它们会导致无意的、难以理解的语法错误。

【讨论】:

  • 谢谢!我知道事情就是这么简单。我总是从 4 个空格和记事本开始,然后用制表符自动缩进。把它关掉了;)
  • 多年来,我一直只使用制表符来缩进 Haskell、Python、C++ 和 bash。 N 个制表符更清楚地表达了我想要的内容(N 级缩进)。我永远不能有一个非整数缩进级别。每个制表符在屏幕上显示的物理空间量(缩进级别)可以在编辑器中配置,并且不需要硬编码到源文件中,我觉得它不属于。
猜你喜欢
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 2020-02-14
相关资源
最近更新 更多