Ошибка Haskell: ошибка анализа на входе '='

Спецификации

GHC 6.12.1

Mac OS X 10.6.4 x64

MacBook Pro

Проблема

Я испытываю затруднения с помощью let синтаксис. Следующий код отказывается компилировать:

module Main where

main = let x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

Я пытался снабдить вкладками в y = 2 и z = 3 еще больше. Провал.

(Нежелательные) Решения

Единственным путем я добрался, код для компиляции также

  1. Замена твердых вкладок с пробелами.
  2. Замена let пункт с a where пункт.
7
задан mcandre 9 August 2010 в 01:05
поделиться

4 ответа

Сайзан на #haskell объясняет, что присваивания в выражении let должны выравниваться, а не сам let . Пока назначения совпадают, можно использовать жесткие или программные вкладки.

Правильный код:

module Main where

main = let
        x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
16
ответ дан 6 December 2019 в 05:42
поделиться

Если вы настаиваете на использовании символов TAB в исходном тексте, компилируется следующее:

module Main where

main =
    let x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

, где все ведущие пробелы - это либо одна, либо две табуляции, а пробелы между let и x = 1 также является TAB.Просмотрено в режиме списка vi , чтобы сделать табуляторы и концы строк явными:

module Main where$
$
main =$
^Ilet^Ix = 1$
^I^Iy = 2$
^I^Iz = 3$
^Iin putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z$

Ваша жизнь станет намного проще, а код красивее, если вы переключитесь на пробелы.

1
ответ дан 6 December 2019 в 05:42
поделиться

Отступ каждого объявления в let-блоке должен быть одинаковым. Также хорошей формой является отступ "in" и "let" на один и тот же уровень. Например.

main = let x = 1
           y = 2
           z = 3
       in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
3
ответ дан 6 December 2019 в 05:42
поделиться

Вы просто не можете правильно управлять отступом с помощью вкладок, потому что размер вкладки не определен.

Поэтому не используйте табуляции в Haskell. Они - зло.

11
ответ дан 6 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: