2011-11-06 15 views
5

En un archivo necesito usar el operador preludio normal (++) y también deseo implementar mi propio comportamiento para (++). He usado import Prelude hiding (++) en la parte superior de mi archivo, he definido mi propio operador (++) y ahora, más abajo, deseo referirme al preludio normal (++). ¿Cómo logro esto?Haskell Prelude hidden, UNDO?

Respuesta

14

Escribir

import qualified Prelude 

además de

import Prelude hiding ((++)) 

al principio del código, y escribir Prelude.++ donde se necesita ++ en Preludio.

4

Como explicó Tsuyoshi Ito, puede calificar al operador por su nombre de módulo. Sin embargo, dado que al definir su propia versión de (++) lo más probable es que desee aumentar la legibilidad de su programa, calificar a un operador con su nombre de módulo más adelante parece ser una medida extraña.

Basta con mirar a esto: "abc" Prelude.++ "def" ahora eso es feo.

¿Por qué no crear simplemente un nuevo operador, como <++> o una función de infijo como `append`?

+3

Sí, en realidad mi primera reacción a la pregunta fue "No nombre su función' (++) '," aunque no la publiqué. Pero si el asker está escribiendo una biblioteca con su propio '++' que pretende reemplazar el '++' en Preludio, entonces el usuario de la biblioteca idealmente nunca tendrá que usar 'Preludio. ++'. En tal caso (raro), tiene sentido definir una función con el mismo nombre. De lo contrario, tiene poco sentido causar un choque de nombre con algo tan frecuente. –

+1

Empiezo a irritarme cuando las personas leen más allá de la pregunta y responden con "no hacer eso", especialmente cuando la pregunta no proporciona suficiente información sobre su motivación. Deje que los exploradores exploren, déjelos intentar lo que creen que es correcto, permítales ver de primera mano qué tan feo sale cuando lo hacen. Pronto estarán en condiciones de escribir este comentario sobre * sus * respuestas. :-) – luqui