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





Вы можете определить функцию с помощью let:
$ ghci
Prelude> let double n = n + n
Prelude> double 42
84
Кроме того, я не совсем рекомендую это, так как (A) я написал его и (B) он ужасно неразвит, но Halp может быть удобен в Emacs - это немного похоже на электронную таблицу для кода Haskell, интегрированного прямо в ваш исходный код -кодовый буфер. У вас может быть набор выражений, которые вас интересуют, и одним нажатием клавиши увидеть, как все их значения изменяются в зависимости от ваших правок с момента последней переоценки.
Здорово! Улучшения приветствуются - версия Python более отполирована, потому что я больше использую Python.
ghci предоставляет специальный синтаксис для подобных действий. Используйте let для определения функций. Однако в GHC FAQ отмечается, что со сложными функциями может быть сложно, и, как правило, загрузка из файла предпочтительна. Если вы используете что-то вроде Emacs, которое обеспечивает простую интеграцию между вашим исходным файлом и процессом ghci, это не проблема, потому что вы можете загрузить свои определения в интерпретатор нажатием клавиши.
Есть ли в Emacs способ загрузить область файла вместо всего файла?
Нет, вот команды ghci в режиме haskell: haskell-ghci-load-file haskell-ghci-mode haskell-ghci-reload-file haskell-ghci-show-ghci-buffer haskell-ghci-start-process Вы просто получаете нагрузку / перезагрузить поддержку.
При использовании O'Caml и F# определения идут от начала файла вниз. Однако в Haskell тип или функция, определенные ранее в файле, могут ссылаться на тип или функцию позже в этом файле. Итак, в Haskell модуль нужно скомпилировать сразу. Интерактивный цикл несовместим с одновременной компиляцией.
Режим Haskell для Emacs предоставляет функции для работы с интерпретатором. Итак, если вы хотите запустить какую-либо функцию из модуля, который вы редактируете, вы можете использовать C-c C-l для загрузки текущего модуля в ghci (или другой интерактивный haskell) и переключиться в буфер с интерактивным и выполнить некоторые команды там.
Как вы заметили, возможности GHCi довольно ограничены - короткие функции или выражения - это все, что легко сделать в командной строке. В остальном ловлю себе загрузку модулей. Одна из трудностей заключается в том, что Haskell не имеет определения перед использованием, поэтому часто бывает трудно извлечь значимый фрагмент из файла. Обычно я определяю небольшие модули, загружаю и перезагружаю их. Интерактивный опыт определенно не такой приятный, как хотелось бы.
Flymake в сочетании с Emacs Haskell Mode 2.8 работает очень хорошо, и вы получаете немедленный ответ средства проверки типов. На мой взгляд, это более интерактивно.
Спасибо. Халп выглядит действительно кстати. Я попробую :)