我是mac新手,我正在使用我需要的所有程序安装计算机,其中一个是Haskell。
令我惊讶的是,OS X的Haskell平台与Windows不同(在平台安装上有一个GUI编辑器 - winGHiC)。看了很多,我发现这个编辑器 TextMate 应该与Haskell兼容,但我觉得为它设置Haskell Bundle非常复杂。
我已经下载并安装了以下内容:
是否有人熟悉如何使其正常工作?这对我来说意味着一个详细的逐步解释,就像我说的那样,自从我第一次使用OS X以来,我只有一天。
非常感谢。
答案 0 :(得分:28)
好的工作是你发现这些日子里的傻瓜在Github上了。
您应该可以点击Bundles
,然后点击Haskell
来查找内置选项。标准Haskell.tmbundle
中相当少。最明显有用的是...加载文件command-shift-r
或command-R
。如果你已经写了一个结尾为.hs或.lhs的模块,那么......在ghci中打开它。
(有一些关于TextMate II中集成终端的讨论,但是谁知道呢?非集成终端的一个令人讨厌的特性是,人们很想通过单击命令-R而不是通过执行来重新加载:r inside ghci
;在某些疯狂事件中,我会发现我有15份终端开放。)
许多不错的功能只是一般TextMate的东西,由语言描述决定,因此阅读TextMate细节的一般描述可能会很好。例如,如果多行是高亮的,那么用--
s命令/注释它们;或者,如果它们已被评论,则取消评论它们。在我意识到它已经存在之前,我已经把一些东西一起砍掉了,但是我没有仔细研究过这本手册。
当然,一切都有键绑定,并且很容易添加自己的脚本来运行小脚本并插入一些小片段,比Emacs更多。
在Bundles
下点击Bundle Editor
并查看不同类型的文字。
因此,例如,要创建一个制表符触发器来启动语言扩展编译指示{-#LANGUAGE ... #-}
,其中光标位于空格...
中,复制Snippet
并替换
{-#LANGUAGE ${1}#-}
选择Activation: Tab Trigger
和(比方说)LANG
作为触发器。
一个好处是它们都是shell脚本,或者(就像这一个)部分shell脚本,周围有一些TextMate变量,你几乎可以用自己喜欢的语言编写它们。 (对于Haskell包,我没有任何Haskell可以说的,但对于我做的其他包。)
语法突出显示令人惊讶的声音,但跳过一些奇特的扩展,例如“PackageImports”,GADT语法,Haddock文档系统的标记,以及其他一些奇怪的东西。我已经自己攻击了,但是我发现语法文件的格式非常难以理解,所以发送副本没用。在过去的两三年里,Haskell.tmbundle
已经被一些知识渊博的Haskellers所推崇。最初制作它的人只是学习Haskell,并没有例如组成Haddocked模块,但另一方面,他似乎非常熟练并且对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”键绑定/选项对突出显示的术语起作用;这是hayoo网站的副本,可以搜索类型签名的使用
echo "<meta http-equiv=\"refresh\" content=\"0;
http://holumbus.fh-wedel.de/hayoo/hayoo.html?query=${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}\">"
如果你cabal安装了hoogle,那么你可以使用如下脚本对hoogle进行本地调用:
hoogle --w --n=100 '${TM_SELECTED_TEXT:=$TM_CURRENT_WORD}'
选择保存:无,输入:选定文本,或:Word,输出:显示为HTML
我所做的其他修正大多是微不足道的,比如`{ - #LANGUAGE ...# - }的标签触发片段,或者我自己的怪癖。
我设法集成的一件事是来自Hackage的typeof
可执行文件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
(然后选择一个键绑定,我的是control-option-command-j
)同样,对于通过typeof
的类型插入,创建一个新的C(命令文件)标题并包括:< / p>
#!/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可执行文件,第一个安装了cabal,第二个是上面评论的白痴,在我的本地~\bin
编译,以绕过一些逃避废话。在这里,您应该选择Output : Insert as Snippet
对不起,我只想到随意的事情。你应该继续在这个标题下发帖提问,因为我认为值得看看一个人如何绊倒,还有我们聪明的Haskeller朋友可能会想到的。我一直意味着把我的tmbundle的'fork'放在github上,但它并不太令人兴奋,而Bundle目录的组织永远会让我失望。