У меня есть функция, которая берет данные и возвращает одни и те же данные или слегка измененную версию.
Я хочу, чтобы моя программа выполняла одно дело, если оно изменилось, или другое, если оно не изменилось.
Раньше я возвращал пару (Bool,Object)
и используя fst
, чтобы проверить, не изменилось ли оно. В последнее время мне пришло в голову, что я могу упростить код, просто вернув объект и проверив равенство, используя ==
.
Но потом я понял, что Haskell не проводит различия между проверкой глубокого равенства и "идентичностью объекта" (т.е. равенством указателя). Итак, как я могу узнать, будет ли использование ==
эффективным или нет? Должен ли я избегать этого по соображениям эффективности, или есть случаи, когда я могу зависеть от компилятора, выясняя, что ему не нужно делать глубокую проверку равенства?
Обычно я не стал бы слишком беспокоиться об эффективности при написании начальной программы, но это влияет на интерфейс моего модуля, поэтому я хочу, чтобы это было правильно, прежде чем писать слишком много кода, и, похоже, это не стоит программа намного менее эффективна только для небольшого фрагмента кода. Более того, я хотел бы получить лучшее представление о том, какие оптимизации я могу зависеть от GHC, чтобы помочь мне.