Настройка TextMate для программирования Haskell в Mac OS X

Я новичок в mac, и я в процессе настройки своего компьютера со всеми необходимыми мне программами, один из которых - Haskell.

К моему удивлению, платформа Haskell для OS X не похожа на Windows (там, где есть графический редактор, встроенный в установку платформы - winGHiC). После многого поиска, я нашел этот редактор TextMate, который должен быть совместим с Haskell, но мне сложно установить Haskell Bundle для него.

Я уже загрузил и установил следующее:

  • Платформа Haskell для Mac OS X
  • Xcode 3.4 (предварительное условие Haskell)
  • TextMate
    • Файлы haskell.tmbundle(упомянутые выше)

Кто-нибудь знает, как заставить его работать? Это будет означать для меня подробное поэтапное объяснение, как я уже сказал, я был всего лишь 1 день с тех пор, как впервые использовал OS X.

Спасибо, куча.

Ответ 1

Хорошо, хорошо, что вы обнаружили, что в настоящее время в Гитбуте находится Трамвай.

Вы можете найти встроенные параметры, нажав Bundles, затем Haskell. В стандарте Haskell.tmbundle довольно мало. Наиболее очевидно полезным является... загрузить файл command-shift-r или command-R. Если вы написали модуль с окончанием .hs или .lhs, он... откроет его в ghci.

(В TextMate II было несколько разговоров о встроенном терминале, но кто знает? Одна из неприятных особенностей неинтегрированного терминала заключается в том, что у вас возникает соблазн "перезагрузить", щелкнув команду-R, а не делая: r внутри ghci, в некоторых бешенствах будет развиваться то, что у меня есть 15 копий Terminal open.)

Многие из приятных функций - это просто общие вещи TextMate, определяемые описанием языка, поэтому было бы полезно прочитать общее описание тонкостей TextMate. Например, если несколько строк высокоэластичны, тогда команда/комментирует их с помощью -- s; или, если они уже прокомментированы, раскоментирует их. Я собрал что-то для этого, задолго до того, как понял, что он уже существует, недостаточно внимательно изучив руководство.

У всех есть привязки клавиш, конечно, и очень легко добавить свои собственные, чтобы запускать маленькие скрипты и вставлять небольшие фрагменты, гораздо более, чем в Emacs.

В Bundles нажмите Bundle Editor и просмотрите текст для разных вещей.

Так, например, чтобы создать триггер табуляции, чтобы начать расширение языка pragma {-#LANGUAGE ... #-}, где курсор находится в пространстве ..., сделайте копию Snippet и замените

{-#LANGUAGE ${1}#-}

выберите Activation: Tab Trigger и (скажем) LANG как триггер.

Самое приятное, что все скрипты оболочки, а также (как этот) частичные сценарии оболочки с некоторыми переменными TextMate, и вы можете в значительной степени написать их на своем собственном предпочтительном языке. (Для пакета Haskell у меня нет никаких Haskell, о которых можно говорить больше, но для других пакетов я делаю.)

Подсветка синтаксиса удивительно звучит, но срабатывает над несколькими причудливыми расширениями, например. "PackageImports", синтаксис GADT, разметка для системы документации Haddock и некоторые другие странности. Я взломал свой собственный, но формат файлов синтаксиса довольно непонятен, поэтому бесполезно отправлять вам копию. Haskell.tmbundle был исправлен некоторыми знающими Haskellers за последние два или три года. Человек, который впервые сделал это, просто изучал Haskell и не имел, например, состоящий из отцепившихся модулей, но, с другой стороны, он, к счастью, к счастью, был очень опытным и имел глубокое знание механизма TextMate.

Обратите внимание, что TextMate хранит исправления, которые вы делаете в Bundle Editor довольно странным образом. Пакеты, которые поставляются с TextMate, например. C, Ruby, HTML, LaTeX и т.д. находятся в /Applications/Textmate.app/.../Bundles. Те, которые вы устанавливаете, находятся в /Library/Application\ Support/TextMate/Bundles. Когда вы делаете исправления через Bundle Editor, они сохраняются в локальном ~/Library/Application\ Support/TextMate/Bundles.. Это имеет смысл, но это немного сложно и препятствует общественному улучшению пакета Haskell. (В одном пакете, который я разделяю с людьми, а не с Haskell, я держусь в последнем, самом удаленном каталоге под версией git, поэтому оригинал и мои исправления вместе.)

"Поиск по Hoogle" keybinding/option действует на выделенные термины; здесь реплика для сайта hayoo, которая может искать использование подписи типа

echo "<meta http-equiv=\"refresh\" content=\"0; 
http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}\">"

Если вы устанавливаете hoogle, вы можете сделать локальный вызов hoogle с помощью script следующим образом:

 hoogle --w --n=100 '${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}'

выберите "Сохранить": "Ничего", "Ввод: выбранный текст" или "Слово", "Вывод": Показать как HTML

Другие исправления, которые я сделал, в основном тривиальны, например, фрагмент триггера tab для `{- # LANGUAGE... # -} или других эксцентриситетов.

Стоит упомянуть, что мне удалось интегрировать исполняемый файл typeof из Hackage, cabal install typeof, который работает с ghci для сигнатуры предполагаемого типа. У меня есть привязка ключей, чтобы показать выводимый тип как отображаемый бит html, но также и вставить его. Это немного нежный, но вот текст для отображения типов

#!/bin/bash
word=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD}
module="${TM_FILEPATH}"
echo $word | typeof $module 

выбор Input: Selected Text, Or: Line; Output: Show as Tool Tip, Activation : Key Equivalent (затем выберите keybinding, my - control-option-command-j). Аналогично, для ввода типа через typeof введите новый заголовок C (командный файл) и включите это:

#!/bin/bash
word=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD}
module="${TM_FILEPATH}"
echo $word | typeof $module | typeof_wordorder

# typeof_wordorder is the following hack compiled
# in my local ~/bin
# module Main where
# main = interact reword where
#  reword :: String -> String
#  reword xs = 
#     xs ++  (head . words . concat . lines $ xs)

Здесь typeof и typeof_worderorder исполняются исполняемые файлы Haskell, первый из которых был установлен на каббале, второй - это прокомментированный идиотизм, скомпилированный в моем локальном ~\bin, чтобы обойти некоторую беглую бессмыслицу. Здесь вы должны выбрать Output : Insert as Snippet

Извините, я просто думаю о случайных вещах. Вы должны продолжать публиковать вопросы по этому разделу, так как я думаю, было бы полезно посмотреть, как можно было бы разобраться, но и то, что, возможно, подумали наши умные друзья Хаскеллера. Я сохраняю смысл ставить "вилку" моего tmbundle на github, но это не слишком захватывающе, и организация каталогов Bundle навсегда побеждает меня.