Tengo una función que toma datos y devuelve los mismos datos o una versión ligeramente modificada.Eficiencia de igualdad en Haskell
Quiero que mi programa haga una cosa si cambia o algo más si no cambia.
Anteriormente devolvía un par (Bool,Object)
y usaba fst
para comprobar si cambiaba. Últimamente se me ocurrió que podía simplificar el código simplemente devolviendo el objeto y comprobando la igualdad usando ==
.
Pero luego me di cuenta de que Haskell no diferencia entre comprobación profunda de igualdad e "identidad de objeto" (es decir, igualdad de puntero). Entonces, ¿cómo puedo saber si usar ==
va a ser eficiente o no? ¿Debería evitarlo por razones de eficiencia, o hay casos en los que puedo depender de que el compilador se dé cuenta de que no necesita hacer una profunda verificación de igualdad?
Normalmente no estaría demasiado preocupado por la eficiencia mientras escribo un programa inicial, pero esto afecta la interfaz de mi módulo, así que quiero hacerlo bien antes de escribir demasiados códigos, y no parece que valga la pena haga que el programa sea mucho menos eficiente solo para una pequeña porción de código. Además, me gustaría tener una mejor idea de qué tipo de optimizaciones puedo depender de GHC para que me ayuden.
Al igual que una nota, esto parece ser un mejor caso para un valor 'Oither' o algo equivalente pero más semántico (por ejemplo, 'data ChangeState a = Same a | Changed a'). – Chuck
No es una mala idea, señaló. – Steve