Хаскелл лексах привет мир

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

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

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 'не экспортируется модулем Main'

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

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

3 ответа

Решение

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

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

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

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

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

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

module Main (main) where
Другие вопросы по тегам