Wszystko, co musisz zrobić, to dodać spacje przed strażnikami, a kod zadziała poprawnie.
pow1 b e
| (e == 0) = 1
| otherwise = b * pow1 b (e-1)
(user142019 już wspomniano to rozwiązanie jednak, że filc jest konieczne wyjaśnienie rozumieć roztwór)
Objaśnienie:
Haskell wykorzystuje przestrzeń-wgłębienia do kontroli struktury i zakresu to jest kod. Inne języki programowania (na przykład Java) polegają na nawiasach klamrowych, zamiast tego Haskell ma wcięcia.
Twój kod nie działa, ponieważ Haskell spodziewa się, że treść funkcji będzie na głębszym poziomie wcięcia niż definicja funkcji i inne definicje funkcji na tym samym poziomie. Każda nowa linia na tym samym poziomie wcięcia będzie próbowała być interpretowana jako nowa definicja funkcji, której nie wolno uruchamiać z ochroną |
, stąd otrzymujemy błąd analizy.
Nie ma nic złego w używaniu klawisza Mac ani w edytorze tekstu.
Na temat wcięć: zakładki nie będą działać. Będziesz musiał wprowadzić spacje ręcznie lub zmienić ustawienia tabulatora w edytorze, aby wstawić 4 spacje (polecam) zamiast tabulatora. (Notepad ++ pozwala na to na przykład, jest to mój preferowany wybór do użycia z Haskellem).
Bardzo polecam używanie dobrego edytora dla Haskella (Vima, Emacsa, Sublime Text 2) zamiast TextEdit. –