2016-12-02 10 views
1

私はghci中だと、次の作品がわかり`でlet`:Haskellの複数行 `ghci`

let foo = ["a", "b", "c"] 

...しかし、これは動作しません:

let bar = ["a", 
      "b", 
      "c"] 

...も、このことを行います。

let baz = ["a"] ++ 
      ["b"] ++ 
      ["c"] 

同じエラーが私はファイルとしてそれをコンパイルしようとしたときに提供するので、それがであることから来ているものではないのですされます対ghcを使用しています。

エラー:あなたは複数行式の:{ :}を使用することができますGHCiので

[1 of 1] Compiling Main    (test.hs, test.o) 

test.hs:3:1: error: 
    parse error (possibly incorrect indentation or mismatched brackets) 

答えて

4

。たとえば:

Prelude> :{ 
Prelude| let bar = ["a", 
Prelude|   "b", 
Prelude|   "c"] 
Prelude| :} 

:{ :}は、次の改行の後にあなたのコードを評価し、それは完全な表現ではありませんので、あなたにエラーを投げてからGHCiのを保持します。

トップレベルの定義ではletは不要です。通常のHaskellのソースファイルでは次のように記述します:あなたはどちらかletを必要としない新しいGHCiのバージョン(8.0以降)でさらに

bar = ["a", 
     "b", 
     "c"] 

を。

+0

'ghc'(' ghci'ではなく)でコードをコンパイルするとどうでしょうか – Scoobie

+0

ソースファイルで ':{:}'は必要ありません。あなたは普通のHaskellを書くだけです。 ':{:}'は、GHCiが最初の改行の後にあなたのコードを評価してエラーを投げ捨てるのを防ぎます。 – jpath

+0

複数行のコードは 'ghc'でもコンパイルされません。 LETのFOO = [ "A"、 "B"、 "C"] LETバー= [ "A"、 "B"、 "C"] はせバズ= [ ""] ++もし 'let'を記述しないであろうソースファイルのトップレベルの定義について (例えば) "B"] ++ [ "C"] 主=印刷FOO – Scoobie

関連する問題