2016-09-08 5 views
0

なぜこのHaskellコードは行9(t = 1)にParse error on input '='を生成しますか?入力時の解析エラー

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; 
    } 
} 
+4

それがAであるため、 'do'-blockと' let'が必要です。 – arrowd

+0

私はその行の先頭にletを追加すると、バインディングを行う際に解析エラーが発生します。 –

答えて

4

あなたはtの宣言のletが欠落している、とあなたが代わりに中括弧とセミコロンのいくつかのインデントを使用する必要があります。

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 
+0

ほとんどのHaskellコードはインデントを使用しますが、中括弧とセミコロンは正当です。 –

+0

@ ThomasM.DuBuisson合法ですが、複数行を使用する場合は不要なところで省略してください。私はそれらを1ライナーでしか見ない。 – Bergi

0

他の人が指摘したように、あなたがt = 1letキーワードを逃しました。これが追加されると、まだ解析エラーが発生していることに驚きました。

あなたの元の例のように中括弧やセミコロンで構文的に有効な解決策がある:それはあなたがreturn()return 0を変更することができますコンパイルしてもらうためには

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 
      } 
} 

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 
      } 
} 
関連する問題