2011-01-12 15 views
8

złe wieści dziś rano, byłem skłonny spróbować użyć Leksah (ładnie wyglądająca aplikacja przy okazji) do kontynuowania nauki haskell.haskell leksah hello-world

Nie mogłem skompilować przykładu "Hello World", który znalazłem czytając leksah tutorial.

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

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

i

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

compilation-error: src\Main.hs:1:0: The main function main' nie jest eksportowana przez moduł Main'

Co byś mi doradzić, aby spróbować czegoś innego?

WAŻNE EDIT: Teraz Leksah jest dostarczany z pliku Main.hs, załadowane bezpośrednio Przy pierwszym uruchomieniu leksah, który zawiera w pełni functionnal projekt Hello World mini. Ma również minimalistyczną część licznika testu jednostkowego. Idealne dla początkujących :-)

Odpowiedz

15

tekst w nawiasach po nazwie modułu jest lista eksport. Oznacza to, że musisz umieścić tam wszystkie funkcje w programie, który chcesz wyeksportować. Ale oprócz tego musisz także gdzieś zdefiniować swoją główną funkcję. Spróbuj tego:

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

PS: Można również usunąć nawiasach i coś tam, niż cokolwiek w module ma być eksportowana.

+0

wiele thanx fuz! –

6

Twój drugi przykład już prawie istnieje, po prostu usuń () obok: Main. To jest twoja lista eksportowa dla twojego modułu, który zrobiłeś pusty (nic pomiędzy nawiasami). Z tego powodu main nie jest widoczny (ponieważ nie został wyeksportowany).

Można też po prostu wyeksportować główny:

module Main (main) where 
+0

Czy dobrze jest eksportować wszystko? –

+0

Cóż, nie mogę powiedzieć na pewno, jaka jest najlepsza praktyka, ale: generalnie ograniczam eksport, gdy mam dość dobry pomysł, że utworzyłem spójny moduł. Ograniczanie eksportu może być ważne dla typów danych, do których nie chcesz, aby ludzie mieli bezpośredni dostęp przez zdefiniowany zestaw funkcji. – ScottWest

+1

A także, kompilator może zoptymalizować lepiej, jeśli nie eksportujesz niczego. – fuz

6

"Czy dobrą praktyką jest eksportowanie wszystkiego?" Absolutnie nie. Nie chcesz, aby szczegóły implementacji, takie jak metody pomocnicze, wyciekły na zewnątrz. Innym przykładem są konstruktory wartości, ponieważ nie ma możliwości sprawdzenia poprawności, domyślnych argumentów itp. Dla nich. Aby temu zaradzić, używasz ich tylko wewnątrz modułu i zapewniasz wygodne i bezpieczne funkcje inicjalizacji na zewnątrz.