Haskell Interactive

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
5 227
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

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

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

Спасибо. Халп выглядит действительно кстати. Я попробую :)

namin 11.12.2008 23:39

Здорово! Улучшения приветствуются - версия Python более отполирована, потому что я больше использую Python.

Darius Bacon 12.12.2008 00:52

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

Есть ли в Emacs способ загрузить область файла вместо всего файла?

namin 05.12.2008 01:30

Нет, вот команды ghci в режиме haskell: haskell-ghci-load-file haskell-ghci-mode haskell-ghci-reload-file haskell-ghci-show-ghci-buffer haskell-ghci-start-process Вы просто получаете нагрузку / перезагрузить поддержку.

Nathan Shively-Sanders 05.12.2008 03:31

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

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

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

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

Другие вопросы по теме