解析输入错误

时间:2016-09-08 16:06:36

标签: haskell

为什么这个Haskell代码在第9行(Parse error on input '=')产生t = 1

module Main where
import System.IO
import Data.List.Split
main = do {
    flag <- isEOF;
    if flag then return 0
    else do {
        s <- getLine;
        t = 1;
        print s;
    }
}

2 个答案:

答案 0 :(得分:4)

let声明你遗漏了t,你应该使用一些缩进而不是大括号和分号:

module Main where

import System.IO
import Data.List.Split

main = do
  flag <- isEOF
  if flag
    then return 0
    else do
      s <- getLine
      let t = 1
      print s

答案 1 :(得分:0)

正如其他人所说,您在let之前错过了t = 1关键字。我很惊讶地发现,一旦添加它,你仍会得到一个解析错误。

在原始示例中使用大括号和分号的语法上有效的解决方案是:

module Main where
import System.IO
import Data.List.Split
main = do {
    flag <- isEOF;
    if flag then return 0
    else do { s <- getLine
            ; let t = 1
            ; print s
            }
}

为了让它能够编译,您可以将return 0更改为return ()

module Main where
import System.IO
import Data.List.Split
main = do {
    flag <- isEOF;
    if flag then return ()
    else do { s <- getLine
            ; let t = 1
            ; print s
            }
}