2016-04-03 21 views
0

ブロックを書くときは、ブロックmain = do ...だけを書くと完全に動作します。私はそれだけでもstories = do...ブロックを置くときにも動作します。たぶん、インデントの問題があります。ここで入力 "="の構文解析エラーが発生しました。

はコードです:それと間違っている

stories = do 
let str0 = "There once was " 
str1 <- ["a princess ", "a cat ", "a little boy "] 
let str2 = "who lived in " 
return ( str0 ++ str1 ) 

main = do 
let len = length stories 
putStrLn ("Enter a number from 0 to " ++ show (len - 1)) 
n <- readLn 
putStrLn "" 
putStrLn (stories !! n) 

何?

答えて

2

この事実は、例えばPythonの場合のように広告されていませんが、Haskellはsyntactically significant indentationです。あなたのケースではdo秒の遺体のコードをインデントする必要があります。

stories = do 
    let str0 = "There once was " 
    str1 <- ["a princess ", "a cat ", "a little boy "] 
    let str2 = "who lived in " 
    return ( str0 ++ str1 ) 

main = do 
    let len = length stories 
    putStrLn ("Enter a number from 0 to " ++ show (len - 1)) 
    n <- readLn 
    putStrLn "" 
    putStrLn (stories !! n) 
+1

だけを確認するために、OPの問題は、彼らは基本的に 'do'ブロック内の' main'を定義しようとしているということです。 – BalinKingOfMoria

関連する問題