Вопрос

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

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 пункт с А. 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$

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top