Ошибка Haskell: ошибка анализа на входе `= '
-
26-09-2019 - |
Вопрос
Спецификация
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
даже больше. Нет кости.
(Нежелательные) решения
Единственный способ, которым я получил код, чтобы скомпилировать, это либо
- Заменив жесткие вкладки пробелами.
- Замена
let
пункт с А.where
пункт.
Решение
Сайзан на #haskell объясняет, что назначения в пусть выражение должно выровнять, а не позволять сам. До тех пор, пока выстраиваются задания, это нормально использовать жесткие вкладки или мягкие вкладки.
Правильный код:
module Main where
main = let
x = 1
y = 2
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
Другие советы
Вы просто не можете правильно управлять вдавливанием с вкладками, потому что размер вкладки не определен.
Поэтому не используйте вкладки в Haskell. Это зло.
Отступ каждую декларацию в установке в той же степени. Также хорошая форма - отступ «в» и «пусть» на тот же уровень. Например..
main = let x = 1
y = 2
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
Лично я положил полуколон в конце каждой строки
module Main where
main = let x = 1 ;
y = 2 ;
z = 3
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z
Если вы настаиваете на вкладке символов в своем источнике, следующие компилирования:
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
также вкладка. Смотреть в VI's Список режимов Сделать вкладки и концы линии явным:
Модуль главный где$ $Главная =$ ^ I.позволять^ I.х = 1.$ ^ Я ^ яy = 2.$ ^ Я ^ яz = 3.$ ^ I.В Putstrlnn $ "x =" ++ показывают x ++ " NY =" ++ Show Y ++ " nz =" ++ Show Z$
Ваша жизнь будет намного проще, и ваш код красивее, если вы переключитесь на пробелы.