Каково точное обещание/гарантия, предоставляемая языком Haskell в отношении ссылочной прозрачности? По крайней мере, в докладе Haskell не упоминается это понятие.
Рассмотрим выражение
(7^7^7`mod`5`mod`2)
И я хочу знать, действительно ли это выражение 1. Для моей безопасности я сделаю это дважды:
( (7^7^7`mod`5`mod`2)==1, [False,True]!!(7^7^7`mod`5`mod`2) )
который теперь дает (True,False)
с GHCi 7.4.1.
Очевидно, что это выражение теперь по-видимому непрозрачно. Как я могу узнать, зависит ли программа от такого поведения? Я могу нагрузить программу с помощью ::
, но это не делает ее очень читаемой. Существует ли какой-либо другой класс программ Haskell, который я пропустил? Это между полностью аннотированным и неаннотированным?
(Помимо единственного вопроса, связанного с который я нашел на SO, должно быть что-то еще на этом)