А в чем вы пишите на Haskell?

837 views
Skip to first unread message

Eax Melanhovich

unread,
Mar 9, 2015, 1:23:37 PM3/9/15
to haskell...@googlegroups.com
Я много лет писал код в Vim и не знал бед. А потом открыл для себя
IntelliJ IDEA и приуныл. IDEA я просто поставил и из коробки получил
автокомплит, удобное переименование функций и переменных, отображение
типов функций и переменных, автоматическое добавление нужных
импортов, отображение документации по функциям, возможность найти места,
где используется функций и многое-многое другое. Все это, правда, для
Java и Scala. Для Vim такое если и настраивается, то только после многих
приседаний со штангой, и то результат скорее всего будет намного хуже.

И вот я начал искать что-то похожее для Haskell. В первом приближении
картина следующая:

* Vim - дает очень мало из описанного и сложно настраивается
* Yi - cказать по правде, давно не смотрел. Когда смотрел, был примерно
как Vim, только написанный на Haskell.
* Emacs - я все еще не осилил...
* IntelliJ IDEA - имеет два плагина для Haskell. Оба намного лучше, чем
писать просто в Vim, но все равно слабоваты
* Eclipse + EclipseFP - наверное, дня два плясал с бубном. Все повисает
при изменении одной буковки в исходниках. Так и не разобрался, как
решить эту проблему
* Leksah - к моему удивлению, самое близкое к идеалу. Переход к
определению функции, например, делается довольно сложно (Ctr + F, Ctr
+ G (grep), найти нужный файл в списке), плохо работает с локальными
функциями и переменными, но зато показывает все что нужно для
установленных пакетов.

Вопрос - а в чем вы пишите на Haskell? И есть ли в природе для
Haskell что-то сравнимое с тем, как IDEA поддерживает Scala?

--
Best regards,
Eax Melanhovich
http://eax.me/

Maxim Kulkin

unread,
Mar 9, 2015, 3:13:06 PM3/9/15
to haskell...@googlegroups.com
Я пользую VIM безо всяких дополнительных примочек. Я объясню почему.
GoTo definition лично мне не нужен, если мне надо открыть код какой-то функции, я точно знаю какой файл мне открыть, поэтому, даже если бы я мог просто выделить функцию и нажать какую-нть комбинацию клавиш, это не сильно бы ускорило процесс (а возможно, и замедлило, ибо надо было бы добраться до названия функции курсором).
Добавление импортов - да, это часто мешает, но подталкивает к более скрупулезному подходу к импортам. Я практически никогда не импортирую все, чаще всего делаю qualified import модуля с присвоением короткого алиаса и вызова функций по fully qualified имени.
Я каждый свой проект разрабатываю в контейнерах (либо Docker, либо внутри виртуальных машин Vagrant), поэтому, если я хочу всяких красот типа проверки синтаксиса налету (посредством ghc-mod или hdevtools), то мне надо запускать VIM внутри контейнера, чтобы была видны все сторонние библиотеки, установленные для проекта. Для Vagrant у меня есть Chef рецепты, которые устанавливают все нужные конфиги (например, для VIM) внутрь виртуальной машины.
Самые большие удобства с VIM - единообразие и легковесность. Мне не нужно брать другой редактор, если я хочу вместо Haskell пописать на Bash или Python.

Alexandr Voidex

unread,
Mar 9, 2015, 3:48:38 PM3/9/15
to haskell...@googlegroups.com, ma...@eax.me
Я пишу в SublimeText + SublimeHaskell, go to definition есть, доки показывает.
For fun написал команду: https://github.com/SublimeHaskell/SublimeHaskell/blob/hsdev/Commands/AutoFix.gif но она сырая

понедельник, 9 марта 2015 г., 20:23:37 UTC+3 пользователь Eax Melanhovich написал:
Я много лет писал код в Vim и не знал бед. А потом открыл для себя
IntelliJ IDEA и приуныл. ...

Mike Potanin

unread,
Mar 9, 2015, 5:05:19 PM3/9/15
to haskell...@googlegroups.com
Vim и REPL в отдельном окне, с копированием мышкой туда-сюда.
Для Haskell даже не смотрел в сторону других редакторов.
Пробовал Eclipce для Scala и qtcreator для c++ - не понравилось.
> --
> Вы получили это сообщение, поскольку подписаны на группу "Русский Haskell".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения,
> отправьте письмо на электронный адрес
> haskell-russi...@googlegroups.com.
> Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный
> адрес haskell...@googlegroups.com.
> Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке
> https://groups.google.com/d/msgid/haskell-russian/61273fe8-c2df-4ba5-abd1-4566a311a903%40googlegroups.com.
> Чтобы настроить другие параметры, перейдите по ссылке
> https://groups.google.com/d/optout.

Alexander V Vershilov

unread,
Mar 11, 2015, 5:50:07 AM3/11/15
to haskell...@googlegroups.com
Здравствуйте.

Я вижу тут несколько независимых вопросов:

> Вопрос - а в чем вы пишите на Haskell?

Я пишу на haskell в vim, причем как в настроенном, так и нет.
Из плагинов если используется, то используется syntactic, т.к.
нормально работает с подсветкой даже на больших файлах.
Так же есть автокомплит, но толку от него не много (совсем нету)
потому не использую, все таки Haskell не Java-подобный язык,
и автокомплит для здесь не является жизненно необходимой функцией.
Иногда используется hdevtools для показа типов, что в общем-то
не обязательно. Так же иногда вручную используются hasktags для
goto definition, hoogle для показа поиска функций и отображения
документации по функциям, hlint (только вручную). Естественно
вся работа ведется с включенным параллельно интерпретатором,
в котором есть байнды для всех консольных утилит. Из него же
запускаются юниксовые утилиты для поиска и т.п. (биндить их
в vim мне было просто лень).

В общем-то работа (без потери производительности) возможна и
в голом vim по ssh (+tmux/sceen), на чужом хосте, где своих
конфигов все равно нету, что является плюсом.

> И есть ли в природе для Haskell что-то сравнимое с тем,
> как IDEA поддерживает Scala?

Судя по проведенному обзору данный вопрос является риторическим,
т.к. у автора есть достаточно твердое понимание того, что хочется
и каким именно способом.
По сравнению вышеперечисленых фич с моим подходом к работе
отсуствует только часть рефакторинга связанная с переименованием
функций и переменных по всему проекту.

__
С уважением,
Вершилов Александр
> --
> Вы получили это сообщение, поскольку подписаны на группу Русский Haskell.
>
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес haskell-russi...@googlegroups.com.
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу haskell...@googlegroups.com.
> Просмотреть это обсуждение в Сети можно по адресу https://groups.google.com/d/msgid/haskell-russian/20150309202122.7b9bd194%40fujitsu.
> Настройки подписки и доставки писем: https://groups.google.com/d/optout.



--
Alexander

Arthur Welf

unread,
Mar 11, 2015, 9:30:36 AM3/11/15
to haskell...@googlegroups.com
А на Emacs никто, что ли, не пишет? Хотелось бы узнать, какие packages кто использует на Emacs, кроме haskell-mode. Я как раз его настройкой сейчас занимаюсь.

Отправлено с iPhone

> 11 марта 2015 г., в 12:50, Alexander V Vershilov <alexander...@gmail.com> написал(а):
> Просмотреть это обсуждение в Сети можно по адресу https://groups.google.com/d/msgid/haskell-russian/CAO-1Pb7AoyuWWeFa3tizo-wW1Y%3DK-mOnvHoGBuTB6GBtmsUQ5w%40mail.gmail.com.

Serguey Zefirov

unread,
Mar 11, 2015, 9:42:07 AM3/11/15
to haskell...@googlegroups.com
Far или mc.

Мне этот код потом читать надо, и читать его приходится чаще, чем я его пишу.

Поэтому написание кода должно быть достаточно трудным, чтобы мне 1) надо было делать API минимального размера (что запрещает использование autocomplete) и 2) у меня отсутствовало copy-n-paste, приводя к сокращению читаемого кода.

Чего и всем желаю. ;)


9 марта 2015 г., 20:21 пользователь Eax Melanhovich <ma...@eax.me> написал:

Dmitry Astapov

unread,
Mar 11, 2015, 9:48:55 AM3/11/15
to haskell...@googlegroups.com
Я использую emacs, haskell-mode + hippie-expand, который успешно заменяет autocomplete :)

Просмотреть это обсуждение в Сети можно по адресу https://groups.google.com/d/msgid/haskell-russian/55854B05-4FE7-480B-9C95-FE7E0E50B74D%40gmail.com.

Настройки подписки и доставки писем: https://groups.google.com/d/optout.



--
Dmitry Astapov

Arthur Welf

unread,
Mar 11, 2015, 10:02:29 AM3/11/15
to haskell...@googlegroups.com
Спасибо. А дополняет ли hippie-expand и функции из импортируемых модулей? 

Отправлено с iPhone

11 марта 2015 г., в 16:48, Dmitry Astapov <dast...@gmail.com> написал(а):

Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес haskell...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/haskell-russian/CAFQUnFhUi-Cpii7UWvnW9-RpPA-yMDujpfnfJ0FhDRULzUOrEg%40mail.gmail.com.

Dmitry Astapov

unread,
Mar 11, 2015, 10:06:22 AM3/11/15
to haskell...@googlegroups.com
Hippie-expand дополняет слова (как dabbrev-expand), поэтому он дополняет и имена функций, и модулей, и даже слова в комментариях :)

В отличие от dabbrev-expand ему можно задавать список источников, которые он будет использовать в указаном порядке. Например, сначала из видимой зоны текущего буфера, потом из текущего буфера, потом из других буферов, потом попытаться подставить целую строку, а не просто слово, потом пытаться дополнить как имя файла из текущей директории, и т.п.

Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/haskell-russian/0F16E362-2688-45CD-9A27-92E40B9227A7%40gmail.com.

Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



--
Dmitry Astapov

Alex Chepurnoy

unread,
Mar 19, 2015, 10:35:00 PM3/19/15
to haskell...@googlegroups.com, ma...@eax.me
Intellij Idea, качество Haskell-плагина улучшается от версии к версии, в 14 уже очень неплохо все, надеюсь, и дальше будет развиваться

Eax Melanhovich

unread,
Mar 20, 2015, 4:33:01 AM3/20/15
to Alex Chepurnoy, haskell...@googlegroups.com
Я знаю два плагина для IDEA:

* https://github.com/carymrobbins/intellij-haskforce
* https://plugins.jetbrains.com/plugin/7453

Вы каким пользуетесь?

Артур Вельф

unread,
Mar 20, 2015, 4:48:02 AM3/20/15
to haskell...@googlegroups.com
Я как раз сегодня установил первый и играюсь с ним. Очень нравится
качественным автокомплитом, включая автокомплит Language Pragmas и
автокомплит из импортируемых модулей, а также удобной автоматической
вставкой типов выражений верхнего уровня. Проблему с ghc-mod и cabal
version > 1.20.0.6 решил, как и писал выше, установкой в песочницу
версии cabal ниже проблемной и указанием в настройках плагина пути к
ghc-mod и ghc-modi вручную в песочницу.

Sent from iPad

> 20 марта 2015, в 11:33, Eax Melanhovich <ma...@eax.me> написал(а):
> --
> Вы получили это сообщение, поскольку подписаны на группу Русский Haskell.
>
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес haskell-russi...@googlegroups.com.
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу haskell...@googlegroups.com.
> Просмотреть это обсуждение в Сети можно по адресу https://groups.google.com/d/msgid/haskell-russian/20150320113036.42dd4721%40fujitsu.

Alex Chepurnoy

unread,
Mar 20, 2015, 2:34:07 PM3/20/15
to haskell...@googlegroups.com, al...@secureae.com, ma...@eax.me
От JetBrains пользуюсь

Dmitry Dzhus

unread,
Apr 4, 2015, 6:51:32 AM4/4/15
to haskell...@googlegroups.com
В домашних тапочках.

Александр Замараев

unread,
Apr 6, 2015, 10:11:16 AM4/6/15
to haskell...@googlegroups.com, ma...@eax.me
Небольшие скриптики - mcedit & Kate
Большие - Leksah & Eclipse + EclipseFP

Leksah - довольно удобен.

Только вот незадача, в репах Ubunt-ы он 0.12 - довольно старый.
А через cabal-dev не ставится - хочет переставить кучу пакетов и обламывается, возможно от того, что некоторые поставлены через aptitude.
Как быть в такой ситуации?

понедельник, 9 марта 2015 г., 23:23:37 UTC+6 пользователь Eax Melanhovich написал:

Maxim Taldykin

unread,
Apr 6, 2015, 10:20:20 AM4/6/15
to haskell...@googlegroups.com, ma...@eax.me


6 апреля 2015 г., 17:11 пользователь Александр Замараев <tonal.p...@gmail.com> написал:

Небольшие скриптики - mcedit & Kate
Большие - Leksah & Eclipse + EclipseFP

Leksah - довольно удобен.

Только вот незадача, в репах Ubunt-ы он 0.12 - довольно старый.
А через cabal-dev не ставится - хочет переставить кучу пакетов и обламывается, возможно от того, что некоторые поставлены через aptitude.
Как быть в такой ситуации?

 
Нужно понять почему обламывается и починить. Есть лог сборки? 

Александр Замараев

unread,
Apr 6, 2015, 2:31:17 PM4/6/15
to haskell...@googlegroups.com, ma...@eax.me
Поставил cabal-dev из исходников. Им поставил cabal.
Ставлю leksah:
$ cabal-dev install --force-reinstalls leksah
...
cabal: Error: some packages failed to install:
cairo-0.13.1.0 failed during the configure step. The exception was:
ExitFailure 1
ghcjs-dom-0.1.1.3 depends on glib-0.13.1.0 which failed to install.
gio-0.13.1.0 depends on glib-0.13.1.0 which failed to install.
glib-0.13.1.0 failed during the configure step. The exception was:
ExitFailure 1
gtk3-0.13.6 depends on glib-0.13.1.0 which failed to install.
gtksourceview3-0.13.1.3 depends on glib-0.13.1.0 which failed to install.
jsaddle-0.2.0.3 depends on glib-0.13.1.0 which failed to install.
leksah-0.14.4.0 depends on glib-0.13.1.0 which failed to install.
leksah-server-0.14.3.2 depends on glib-0.13.1.0 which failed to install.
ltk-0.14.3.0 depends on glib-0.13.1.0 which failed to install.
pango-0.13.1.0 depends on glib-0.13.1.0 which failed to install.
vcsgui-0.1.1.0 depends on glib-0.13.1.0 which failed to install.
webkitgtk3-0.13.1.2 depends on glib-0.13.1.0 which failed to install.
webkitgtk3-javascriptcore-0.13.0.4 depends on glib-0.13.1.0 which failed to
install.

Пытаюсь ставить glib:
$ cabal-dev install --force-reinstalls glibResolving dependencies...
[1 of 2] Compiling SetupWrapper     ( /tmp/glib-0.13.1.0-18753/glib-0.13.1.0/SetupWrapper.hs, /tmp/glib-0.13.1.0-18753/glib-0.13.1.0/dist/setup/SetupWrapper.o )
[2 of 2] Compiling Main             ( /tmp/glib-0.13.1.0-18753/glib-0.13.1.0/Setup.hs, /tmp/glib-0.13.1.0-18753/glib-0.13.1.0/dist/setup/Main.o )
Linking /tmp/glib-0.13.1.0-18753/glib-0.13.1.0/dist/setup/setup ...
[1 of 2] Compiling Gtk2HsSetup      ( Gtk2HsSetup.hs, dist/setup-wrapper/Gtk2HsSetup.o )

Gtk2HsSetup.hs:167:16:
    Not in scope: `LBI.getComponentLocalBuildInfo'
Failed to install glib-0.13.1.0
cabal: Error: some packages failed to install:
glib-0.13.1.0 failed during the configure step. The exception was:
ExitFailure 1

понедельник, 6 апреля 2015 г., 20:20:20 UTC+6 пользователь Maxim Taldykin написал:

Maxim Taldykin

unread,
Apr 6, 2015, 5:28:22 PM4/6/15
to haskell...@googlegroups.com, ma...@eax.me

cabal-dev не нужен, вместо него обычный cabal уже два года как поддерживает sandboxes.
Для сборки glib советуют [1] сделать cabal install Cabal.



6 апреля 2015 г., 21:31 пользователь Александр Замараев <tonal.p...@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу "Русский Haskell".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес haskell-russi...@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес haskell...@googlegroups.com.
Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке https://groups.google.com/d/msgid/haskell-russian/d49ea9a0-64b7-4188-bf87-259986f10c55%40googlegroups.com.

Александр Замараев

unread,
Apr 9, 2015, 1:15:52 AM4/9/15
to haskell...@googlegroups.com, ma...@eax.me
Спасибо.
Установка нового cabal-а решила проблему.
Будем посмотреть, что нового в новой версии. :)

вторник, 7 апреля 2015 г., 3:28:22 UTC+6 пользователь Maxim Taldykin написал:
Reply all
Reply to author
Forward
0 new messages