2011-01-12 2 views
8

плохие новости этим утром, я был готов попробовать и использовать Leksah (красиво выглядящее приложение кстати) для продолжения обучения haskell.haskell leksah hello-world

Я не смог скомпилировать пример «Hello World», который я нашел, прочитав leksah tutorial.

module Main (
main = putStrLn "Hello World"  
) where 

compilation-error: src\Main.hs:16:5: parse error on input = '`

и

module Main (
) where 
main = putStrLn "Hello World" 

compilation-error: src\Main.hs:1:0: The main function главный' не экспортируется модулем Main'

Что бы вы посоветовали мне попробовать что-то еще?

ВАЖНО EDIT: Теперь Leksah поставляется с файлом Main.hs, загружается непосредственно в первый раз запускаешь leksah, который содержит полностью проект Функциональное Hello World мини. Он также имеет минималистскую единицу измерения счетчика. Отлично подходит для новичков :-)

ответ

15

текст в paranthesis после имени модуля является экспорт списка. Это означает, что вы должны поместить все функции в программу, которую вы хотите экспортировать там. Но кроме этого вам также необходимо определить свою основную функцию. Попробуйте это:

module Main (
    main 
) where 
main = putStrLn "Hello World" 

PS: Вы можете также удалить paranthesis и ничего там, чем что-либо в модуле будет экспортироваться.

+0

много thanx fuz! –

6

Ваш второй пример практически отсутствует, просто удалите () рядом с Main. Это ваш список экспорта для вашего модуля, который вы сделали пустым (ничего между скобками). Из-за этого main не видно (потому что он не экспортируется).

Вы также можете просто экспортировать основные:

module Main (main) where 
+0

Хорошая практика экспортировать все? –

+0

Ну, я не могу точно сказать, что такое лучшая практика, но: в общем, я ограничиваю свой экспорт, когда у меня есть достаточно хорошая идея, что я создал сплоченный модуль. Ограничение вашего экспорта может быть важным для типов данных, которые вы не хотите, чтобы люди обращались напрямую, через определенный набор функций. – ScottWest

+1

А также, компилятор может оптимизировать лучше, если вы не экспортируете anythig. – fuz

6

«Является ли хорошей практикой экспортировать все?» Точно нет. Вы не хотите, чтобы данные реализации, подобные вспомогательным методам, проникали наружу. Другим примером являются конструкторы значений, поскольку для них не существует способов проверки работоспособности, аргументов по умолчанию и т. Д. Чтобы преодолеть это, вы используете их только внутри модуля и обеспечиваете удобные и безопасные функции инициализации снаружи.

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

  • Нет связанных вопросов^_^