Polecenia Wielowierszowe w GHCi

Mam problem z wpisaniem komend wielowierszowych w ghci. Poniższy 2-liniowy kod działa z pliku:

addTwo :: Int -> Int -> Int
addTwo x y = x + y

Ale kiedy wchodzę w ghci, dostaję błędy. Próbowałem również umieścić kod wewnątrz :{ ... :}, ale one również nie działają w tym przykładzie, ponieważ jest to po prostu dołączanie linii do jednej linii, co nie powinno mieć miejsca.

Używam WinGHCi, wersja 2011.2.0.1

 101
Author: hammar, 2011-12-09

3 answers

Przez większość czasu możesz polegać na wnioskowaniu typu, aby opracować podpis dla Ciebie. W twoim przykładzie wystarczy:

Prelude> let addTwo x y = x + y

Jeśli naprawdę chcesz definicji z podpisem typu, lub Twoja definicja obejmuje wiele linii, możesz to zrobić w ghci:

Prelude> :{
Prelude| let addTwo :: Int -> Int -> Int
Prelude|     addTwo x y = x + y 
Prelude| :}
Prelude> addTwo 4 7
11

Zauważ, że możesz również wycisnąć to na jedną linię:

Prelude> let addTwo :: Int -> Int -> Int ; addTwo x y = x + y
Więcej informacji na temat interakcji z ghci można znaleźć na stronie Interaktywna ocena w sekcji prompt dokumentacja.
 139
Author: Nicolas Wu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-09 09:34:34

Rozwiąż ten problem uruchamiając GHCI i wpisując :set +m:

Prelude> :set +m
Prelude> let addTwo :: Int -> Int -> Int
Prelude|     addTwo x y = x + y
Prelude| 
Prelude> addTwo 1 3
4
Boom.

Co się tutaj dzieje (i mówię głównie doty , osoba szukająca pomocy podczas pracy przeznauczyć Cię Haskell ) jest to, że GHCI jest interaktywnym środowiskiem, w którym zmieniasz wiązania nazw funkcji w locie. Musisz zawinąć definicje funkcji w let blok, aby Haskell wiedział, że masz zamiar coś zdefiniować. The :set +m stuff to skrót od multiline :{ kod :} konstruuj.

Białe znaki są również znaczące w blokach, więc musisz wciąć definicję funkcji po definicji typu o cztery spacje, aby uwzględnić cztery spacje w let.

 90
Author: adrian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-12 09:52:39

Użycie let:

Prelude> :{
Prelude| let addTwo :: Int -> Int -> Int
Prelude|     addTwo x y = x + y
Prelude| :}
Prelude> addTwo 2 3
5
 13
Author: Stefan Holdermans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-09 08:54:29