2011-04-15 20 views
11

Soy nuevo en mac, y estoy en proceso de configurar mi computadora con todos los programas que necesito, uno de ellos es Haskell.Configuración de TextMate para la programación de Haskell en Mac OS X

Para mi sorpresa, la plataforma Haskell para OS X no es como en Windows (donde hay un editor GUI construido en la instalación de la plataforma - winGHiC). Después de buscar mucho, encontré este editor TextMate que se supone que es compatible con Haskell pero me resulta bastante complejo configurar el Haskell Bundle para él.

ya he descargado e instalado el siguiente:

  • Plataforma Haskell para Mac OS X
  • Xcode 3.4 (Haskell Requisito previo)
  • TextMate
    • archivos haskell.tmbundle (mencionado anteriormente)

¿Alguien sabe cómo hacerlo funcionar? Significará mucho para mí una explicación detallada paso a paso, como dije, llevo solo 1 día desde que usé OS X por primera vez.

Gracias un montón.

+0

WinGHCi no es un "editor GUI" * per se *. Puede usar el programa 'ghci' desde la línea de comando, que es en gran parte equivalente; eso es lo que hago. En realidad, lo prefiero a WinGHCi, cuya especie de completar comandos es una mierda. – Ezra

Respuesta

28

Bueno, es un buen trabajo que haya encontrado que el tmbundle está en Github en estos días.

Debería poder encontrar las opciones incorporadas haciendo clic en Bundles, luego Haskell. Hay bastante pocos en el estándar Haskell.tmbundle. El más obviamente útil es ... cargar el archivo command-shift-r o command-R. Si ha escrito un módulo con terminando .hs o .lhs, lo abre en ghci.

(Se hablaba de un terminal integrado en TextMate II, pero quién sabe? Una característica molesta de un terminal no integrado es que uno está tentado a 'recargar' haciendo clic en comando-R en lugar de hacerlo: r dentro de ghci; en ciertos frenesíes se desarrollará que tengo 15 copias de Terminal abierto.)

Muchas de las características agradables son solo cosas generales de TextMate, determinadas por la descripción del idioma, por lo que podría ser bueno leer una descripción general de las sutilezas de TextMate. Por ejemplo, si se resaltan varias líneas, comandar/comentarlas con -- s; o, si ya están comentados, los descomenta. Había pirateado algo para hacer esto, mucho antes de darme cuenta de que ya estaba allí, sin haber estudiado lo suficiente el manual.

Todo tiene combinaciones de teclas, por supuesto, y es muy fácil agregar el suyo para ejecutar pequeños scripts e insertar pequeños fragmentos, mucho más que en Emacs, por ejemplo.

En Bundles haga clic en Bundle Editor y examine el texto para diferentes tipos de cosas.

Así, por ejemplo, para hacer un apéndice de gatillo para iniciar un pragma extensión del lenguaje {-#LANGUAGE ... #-} donde está el cursor en el espacio ... hacer una copia de un Snippet y sustituir

{-#LANGUAGE ${1}#-} 

seleccionar Activation: Tab Trigger, y (digamos) LANG como disparador.

Una cosa buena es que son todos los scripts de shell, o bien (como este) scripts de shell parciales con algunas variables TextMate, y puedes escribirlos en tu propio idioma preferido. (Para el paquete de Haskell no tengo ningún Haskell para hablar más, pero para otros paquetes sí).

El resaltado de sintaxis es sorprendentemente sólido, pero se propaga a través de algunas extensiones de fantasía, p. "PackageImports", sintaxis GADT, marcado para el sistema de documentación de Haddock y algunas otras rarezas. He pirateado el mío, pero creo que el formato de los archivos de sintaxis es bastante ininteligible, por lo que no tiene sentido enviarle una copia. El Haskell.tmbundle ha sido enmendado por algunos Haskellers bien informados en los últimos dos o tres años. La persona que primero lo hizo estaba aprendiendo Haskell, y no tenía, por ejemplo, compuso módulos Haddocked, pero por otro lado, afortunadamente parece haber sido muy hábil y haber tenido un conocimiento profundo de la maquinaria TextMate.

Tenga en cuenta que TextMate almacena las modificaciones que realiza en el Bundle Editor de una manera bastante extraña. Los paquetes que vienen con TextMate, p. C, Ruby, HTML, LaTeX, etc. están en /Applications/Textmate.app/.../Bundles. Los que instala están en /Library/Application\ Support/TextMate/Bundles. Cuando realice correcciones a través del Bundle Editor, se almacenan en su ~/Library/Application\ Support/TextMate/Bundles. local. Tiene algún sentido, pero es un poco complicado e impide la mejora pública del paquete de Haskell. (El único paquete que comparto con personas, no el de Haskell, lo mantengo en el último directorio más externo, bajo revisión de git, así que el original y mis enmiendas están juntos.)

La opción de vinculación/opción "Buscar en Hoogle" en términos destacados; aquí es una réplica de la página web hayoo, que puede buscar usos de un tipo de firma

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

Si Cabal instalar Hoogle, entonces usted puede hacer una llamada local a Hoogle con un guión de este modo:

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

eligiendo Guardar: Nada, entrada: seleccionar texto, O: Word, salida: Mostrar como HTML

Otras enmiendas que he hecho son en su mayoría triviales, como un fragmento pestaña detonante de `{- # IDIOMA ... # -} o excentricidades propias.

Una cosa que vale la pena mencionar que logré integrar es el ejecutable typeof de Hackage, cabal install typeof, que se ejecuta en ghci para una firma de tipo inferido. Tengo un enlace de clave para mostrar el tipo inferido como muestra el bit de html, pero también para insertarlo.Es un poco delicado, pero aquí está el texto para el visualizador de tipos

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

elegir Input: Selected Text, Or: Line; Output: Show as Tool Tip, Activation : Key Equivalent (a continuación, elija una combinación de teclas, el mío es control-option-command-j) Del mismo modo, para la inserción de tipo a través de typeof hacer una nueva C (archivos de comandos) en dirección e incluyen lo siguiente:

#!/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) 

Aquí typeof y typeof_worderorder son ejecutables Haskell, la primera cabal-installed, el segundo es la idiotez comentada anteriormente, compilada en mi local ~\bin para evitar algunas tonterías que escapan. Aquí debe elegir Output : Insert as Snippet

Lo siento, solo estoy pensando en cosas al azar. Deberías seguir publicando preguntas debajo de este encabezado, ya que creo que valdría la pena ver cómo se puede tropezar, pero también qué pirateos pueden haber pensado nuestros amigos más astutos de Haskeller. Sigo pensando en poner un 'tenedor' de mi tmbundle en github, pero no es demasiado emocionante, y la organización de los directorios de Bundle me derrota para siempre.

+0

¡guau gracias! no tienes idea de cuánto aprecio todo el nivel de detalle que cubriste. Triple "respuesta aceptada" si pudiera – Panicos