2016-12-02 5 views
1

я в ghci и находим, что следующие работы:Haskell многострочный `` let` в ghci`

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

... но это не работает:

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

... и не делает это:

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

Та же ошибка при условии, когда я пытаюсь скомпилировать его как файл, так что это не то, что происходит от того, в ghci против ghc.

Ошибка:

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

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

ответ

4

В GHCi вы можете использовать :{ :} для многострочных выражений. Например:

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

:{ :} держит GHCI от оценки коды после следующего символа новой строки и бросали ошибки на вас, потому что это не полное выражение.

Обратите внимание, что let не требуется для определения верхнего уровня. В нормальном исходном файле Haskell вы бы просто написать:

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

Кроме того, в новых версиях GHCI (8.0+) не нужен let либо.

+0

Что делать, если я должен был скомпилировать код с 'ghc' (не' ghci') – Scoobie

+0

В исходном файле вам не нужно ': {:}'. Вы просто пишете обычный Haskell. ': {:}' находятся там, чтобы GHCi не оценивал ваш код и не бросал на вас ошибки после первой новой строки. – jpath

+0

Этот многострочный код не компилируется в 'ghc'. пусть Foo = [ "а", "б", "в"] пусть бар = [ "а", "б", "с"] пусть Баз = [ "а"] ++ [ «б»] ++ [ «с»] главной = печатью Foo (например) – Scoobie

Смежные вопросы