Referential Transparency, And The True Meaning Of Functional Programming