Haskell Interactive - PullRequest
       35

Haskell Interactive

7 голосов
/ 04 декабря 2008

Я немного заржавел на своем Хаскеле и собираюсь снова подняться. Одна вещь, которая мне нравится в F # - это интерактивная оболочка F #, интегрированная с Visual Studio: я могу оценивать практически все (включая определения функций и классов) и использовать F # в качестве оболочки. Есть ли эквивалент в Haskell? Когда я использую ghci, я не могу оценить определения функций. Как вы обходите это?

В настоящее время я предпочитаю использовать Emacs с режимом haskell и открыть интерактивный интерпретатор ghi. Однако есть ли способ оценить только область файла?

Ответы [ 6 ]

8 голосов
/ 04 декабря 2008

Вы можете определить функцию, используя 'let':

$ ghci
Prelude> let double n = n + n
Prelude> double 42
84

Кроме того, я не очень рекомендую это, так как (A) я написал это, и (B) он ужасно не развит, но Halp может быть полезен в Emacs - это немного похоже на электронная таблица для кода на Haskell, интегрированная прямо в ваш буфер исходного кода. Вы можете получить интересующий набор выражений и одним нажатием клавиши увидеть, как все их значения изменяются в зависимости от ваших правок с момента последней переоценки.

2 голосов
/ 10 декабря 2008

Как вы заметили, GHCi довольно ограничен в своих возможностях - короткие функции или выражения - это почти все, что легко в командной строке. В остальном я загружаю модули. Одна из трудностей заключается в том, что Haskell не имеет определения перед использованием , поэтому часто бывает трудно извлечь значимый фрагмент из файла. Обычно я определяю маленькие модули, загружаю и перезагружаю их. Интерактивный опыт определенно не так хорош, как хотелось бы.

2 голосов
/ 05 декабря 2008

В режиме Haskell для Emacs предусмотрены функции для работы с intepreter. Поэтому, если вы хотите запустить какую-то функцию из редактируемого вами модуля, вы можете использовать C-c C-l для загрузки текущего модуля в ghci (или другой интерактивный интерфейс haskell) и переключиться в буфер с интерактивным и выполнить там некоторые команды

1 голос
/ 04 декабря 2008

ghci предоставляет специальный синтаксис для подобных вещей. Используйте let для определения функций. Тем не менее, в GHC FAQ отмечено, что он может быть сложным со сложными функциями, и, как правило, загрузка из файла предпочтительнее. Если вы используете что-то вроде Emacs, которое позволяет легко интегрировать ваш исходный файл с процессом ghci, это становится проблемой, потому что вы можете загрузить свои определения в интерпретатор нажатием клавиши.

0 голосов
/ 26 марта 2011

Flymake в сочетании с Emacs Haskell Mode 2.8 работает очень хорошо, и вы сразу же получаете ответ проверки типов На мой взгляд, это более интерактивно.

0 голосов
/ 05 декабря 2008

С O'Caml и F # определения начинаются сверху вниз по файлу. Однако в Haskell тип или функция, определенные ранее в файле, могут ссылаться на тип или функцию позже в этом файле. Таким образом, в Haskell модуль должен быть скомпилирован сразу. Интерактивный цикл несовместим с компиляцией одновременно.

...