2011-01-12 19 views
8

malas noticias esta mañana, estaba dispuesto a probar y usar Leksah (una aplicación atractiva por cierto) para seguir aprendiendo haskell.haskell leksah hello-world

No pude compilar el ejemplo "Hello World" que encontré leyendo el leksah tutorial.

module Main (
main = putStrLn "Hello World"  
) where 

compilation-error: src\Main.hs:16:5: parse error on input = '`

y

module Main (
) where 
main = putStrLn "Hello World" 

compilation-error: src\Main.hs:1:0: The main function principal' no se exporta por el módulo Main'

Qué me aconseja usted a probar otra cosa?

EDITAR IMPORTANTE: Ahora Leksah se envía con un archivo Main.hs, cargado directamente la primera vez que inicie leksah, que contiene un proyecto totalmente functionnal Hello World mini. También tiene una parte contraria de prueba unitaria minimalista. Ideal para principiantes :-)

Respuesta

15

El texto en el un paréntesis después del nombre del módulo es una lista de exportación. Esto significa que debe colocar todas las funciones en el programa que desea exportar allí. Pero aparte de esto, también tienes que definir tu función principal en alguna parte. Prueba esto:

module Main (
    main 
) where 
main = putStrLn "Hello World" 

PS: También puede quitar el un paréntesis y algo ahí, que nada en su módulo se va a exportar.

+0

muchas gracias fuz! –

6

Su segundo ejemplo es casi allí, simplemente elimine el () al lado de Main. Esta es su lista de exportación para su módulo, que ha hecho vacía (nada entre paréntesis). Por eso, main no se ve (porque no se exporta).

También puedes, simplemente principal producto de exportación:

module Main (main) where 
+0

¿es una buena práctica exportar todo? –

+0

Bueno, no puedo decir con certeza cuál es la mejor práctica, pero: en general, limito mis exportaciones cuando tengo una idea bastante buena de que he formado un módulo cohesivo. Limitar sus exportaciones puede ser importante para los tipos de datos a los que no quiere que las personas accedan directamente, a través de un conjunto definido de funciones. – ScottWest

+1

Y también, el compilador puede optimizar mejor, si no exporta cualquier cosa. – fuz

6

"¿Es una buena práctica exportar todo?" Definitivamente no. No desea que los detalles de implementación, como los métodos de ayuda, se filtren al exterior. Otro ejemplo son los constructores de valores, porque no hay forma de tener verificaciones de cordura, argumentos predeterminados, etc. para ellos. Para superar esto, los usa solo dentro del módulo y proporciona funciones de inicialización convenientes y seguras para el exterior.