2008-12-04 15 views
7

Estoy un poco oxidado en mi Haskell y estoy buscando volver a subir. Una de las cosas que disfruto de F # es el intérprete interactivo de F # integrado con Visual Studio: puedo evaluar prácticamente cualquier cosa (incluidas las definiciones de funciones y clases) y usar F # como shell. ¿Hay un equivalente en Haskell? Cuando uso ghci, no puedo evaluar las definiciones de funciones. ¿Cómo trabajas alrededor de eso?Haskell Interactive

Mi configuración preferida actual es usar Emacs con haskell-mode y abrir un intérprete ghi interactivo. Sin embargo, ¿hay alguna forma de evaluar solo la región de un archivo?

Respuesta

8

Se puede definir una función utilizando 'dejar':

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

Además, no voy bastante recomendar esta, ya que (a) que lo escribió, y (B) es terriblemente poco desarrollada, pero Halp puedo ser útil en Emacs: es un poco como una hoja de cálculo para el código Haskell integrado directamente en el búfer de código fuente. Puede tener un conjunto de expresiones que le interesen y con solo presionar una tecla ver cómo cambian todos sus valores según sus ediciones desde la última reevaluación.

+1

Gracias. Halp parece realmente útil. Lo probaré :) – namin

+1

¡Genial! Las mejoras serían bienvenidas: la versión de Python es más refinada porque uso Python más. –

1

ghci proporciona alguna sintaxis especial para hacer cosas como esa. Use let para definiciones de funciones. Sin embargo, se observa en el GHC FAQ que puede ser complicado con funciones complejas y generalmente se prefiere cargar desde un archivo. Si usa algo como Emacs que permite una fácil integración entre su archivo de origen y un proceso de ghci, no se convierte en un problema porque puede cargar sus definiciones en el intérprete con una pulsación de tecla.

+0

En Emacs, ¿hay alguna manera de cargar una región de un archivo en lugar de todo el archivo? – namin

+0

No, aquí están los comandos ghci en modo Haskell: Haskell-ghci-load-file-Haskell ghci en modo Haskell-ghci-recarga-archivo-Haskell ghci-show-ghci tampón Haskell-ghci-arranque proceso Usted acaba de recibir soporte de carga/recarga. –

0

Con O'Caml y F #, las definiciones proceden desde la parte superior del archivo hacia abajo. Sin embargo, en Haskell, un tipo o función definida anteriormente en un archivo puede hacer referencia a un tipo o función más adelante en ese archivo. Entonces en Haskell, un módulo necesita ser compilado todo de una vez. Un ciclo interactivo es incompatible con la compilación todo a la vez.

2

El modo Haskell para Emacs proporciona funciones para el trabajo con intepreter. Entonces, si quieres ejecutar alguna función desde el módulo que editas, puedes usar Cc Cl para cargar el módulo actual en ghci (u otro haskell interactivo) y cambiar al búfer con interactivo y ejecutar algunos comandos allí

2

Como tu Como se ha observado, GHCi es bastante limitado en lo que puede hacer --- las funciones o expresiones cortas son todo lo que es fácil en la línea de comando. Por lo demás, me encuentro cargando módulos. Una de las dificultades es que Haskell no tiene definición antes del uso, por lo que a menudo es difícil extraer un fragmento significativo de un archivo. Generalmente me encuentro definiendo módulos pequeños y cargándolos y volviéndolos a cargar. La experiencia interactiva definitivamente no es tan agradable como uno podría desear.

0

Flymake combinado con Emacs Haskell Mode 2.8 funciona muy bien y obtienes una respuesta inmediata del tipo checker. En mi opinión esto es más interactivo.