data haskell module

data - Haskell: ¿ocultar funciones específicas en las exportaciones de módulos?



import data char haskell (2)

Lamentablemente no.

Uno podría imaginar una pequeña adición sintáctica que permitiría el tipo de cosa que está pidiendo. Ahora mismo es posible escribir:

module M (module M) where foo = quux quux = 1+2

Puedes exportar explícitamente todo el módulo. Pero supongamos que tuviéramos que añadir una sintaxis tal que fuera posible ocultarlo de ese módulo. Entonces podríamos escribir así:

module M (module M hiding (quux)) where foo = quux quux = 1+2

Tengo un módulo Haskell y me gustaría que exportara todos los objetos declarados en su archivo, excepto una función específica local_func .

¿Hay una forma más limpia de lograr esto que escribiendo una lista de exportación que incluya explícitamente todas las demás declaraciones (y manteniéndola cuidadosamente actualizada por toda la eternidad)?

En otras palabras, me gustaría un análogo de import MyModule hiding (local_func) de import MyModule hiding (local_func) , pero especificado en el módulo de exportación en lugar de en el momento de la importación.


Por lo que yo sé, actualmente no hay una manera de hacer esto.

Lo que normalmente termino haciendo es tener un módulo central que reexporta cosas importantes como una forma conveniente de importar todo lo que sea necesario sin ocultar nada en los módulos que definen estas cosas (que en algunos casos, probablemente no prevea) ! - hace que sea más fácil para los usuarios modificar las cosas en su módulo).

Para hacer esto usa la siguiente sintaxis:

-- |Convenient import module module Foo.Import (module All) where -- Import what you want to export import Foo.Stuff as All hiding (local_func) -- You can import several modules into the same namespace for this trick! -- For example if using your module also requires ''decode'' from "Data.Aeson" you can do import Data.Aeson as All (decode)

Ahora has exportado convenientemente estas cosas.