MODULOS

Los módulos en Haskell son la base para construir tipos Abstractos de datos, esto se debe a que los módulos proporcionan el mecanismo de ocultación necesario para aislar los detalles de implementación. Así, el usuario solo le basta con concocer la interfaz o signatura.

 

Declaración de Módulos:

Para definir un módulo se usa la palabra reservada 'module'. Es necesario que el nombre de nuestro módulo comience por letra mayúscula. Podemos dividir el módulo en dos partes bien diferenciadas:

La primera es la parte de descripcion del módulo, corresponde a una la lista de exportación, donde indicamos, entre paréntesis, los métodos que serán visibles cuando se importe ese módulo desde fuera. Las entidades que no aparezcan en esa lista se denominan entidades privadas del módulo, y atienden a aspectos de implementación interna, es decir, no aportan funcionalidad al usuario. Es una buena práctica indicar el tipo de cada función del interfaz en la propia lista de exportación. Si esta lista no aparece tras el nombre del módulo se considera que todas las definiciones son exportadas y por tanto visibles por el usuario; a esto se le conoce como exportación implícita.

La segunda parte corresponde a la implementación, en ella, para cada operación descrita en la lista de exportación, se indica su funcionamiento.

 

Las entidades exportadas deben estar definidas en el módulo o bien deben haber sido importadas de otro módulo. Se pueden exportar funciones, operadores, definiciones de tipos y clases. Cuando se trate de exportar una clase hay que especificar que métodos de la clase se exportan.

Los constructores de un tipo pueden ser también exportados, basta con indicar la lista de constructores tras el nombre del tipo. La siguiente imagen muestra un ejemplo donde se exportan los tres constructores del tipo Triangulo. Si se desea exportar todos los métodos o los constructores de un tipo se sutituye la lista de elementos por paréntesis.

 

Haskell también proporciona una forma para exportar definiciones importadas de otro modulo.

 

 

 

 

 

 

Un detalle a tener en cuenta es que el fichero en el que guardemos la implementacion de modulo debe llamarse del mismo modo que este.